Written by
Lee Jongseo
on
on
클로저(Closure)
1. Nested Scope
def
안 다른 def
를 정의했을 때 Nested Scope가 생긴다.
innter def
를 감싸는(enclosing) outer def
의 scope를 enclosing function(def) scope라고 한다.
(주의: def안에서 선언된 변수는 모두 Local이다.)
X = 10 # Global
def outer():
Y = 100 # Local to outer def and Enclosing Scope. (Enclosing def local)
def inner():
Z = 200 # Local to inner def
2. Closure (function maker or factory function)
위에서 설명한 Nested Scope와 관련된 Functional Programming의 technique중 하나이다.
원리 : 함수 안에서 선언된 또 다른 함수는 enclosing scope를 기억한다
즉, inner
는 outer
의 scope를 기억하고 있다.
따라서 outer
의 영역이 메모리에서 소멸되었어도, inner
는 여전히 outer
의 scope에 있는 변수에 접근할 수 있다.
간단한 예
def exponentN(N):
# 매개 변수 N은 enclosing scope에 존재.
def action(X):
return X ** N # 내부 함수에서 N에 접근 중.
return action # 내부에서 선언한 함수를 반환
exponent2 = exponentN(2)
exponent2(2) # returns 4
exponent2(3) # returns 9
exponentN
함수가 반환하면서 local
scope가 소멸되었지만, 반환된 action
은 스코프를 기억하고 있다.
위와 같은 기법을 통해서 똑같은 작동방식을 가지지만 수가 다른 여러가지 함수를 만들어 낼 수 있다.
exponent3 = exponentN(3)
exponent4 = exponentN(4)
exponent5 = exponentN(5)
exponent3(2) # 2 ** 3. returns 8
exponent4(2) # 2 ** 4. returns 16
exponent5(2) # 2 ** 5. returns 32