[Python] closure

2016. 10. 7. 17:04프로그래밍/Python & dJango

클로저에 대한 정의

: 클로저는 함수 내부에 내부함수를 만들어 리턴(중첩함수라함) 하는 것을 말한다.


예제1)

def aaa():
    def bbb():
        print "hello world"
    return bbb
aaa()

위와 같은 형식이 클로저로 불린다.


위의 예제를 실행하면 아무 결과도 나오지 않는데, 이유는 aaa내의 함수인 bbb를 실행하지 않았기 떄문이다.

def aaa():
    def bbb():
        print "hello world"
    return bbb
clo = aaa()
clo()

위와 같이 수정해주면 aaa의 내부함수인 bbb를 실행했기 때문에 아래와 같은 결과가 출력된다.


result

hello world


다음 예제에서는 클로저를 사용해서 파라미터를 던져 실제로 계산하는 프로세스를 구현해보았다.


def closure_outer(x):
    def closure_inner(y):
        return x + y
    return closure_inner
func_1 = closure_outer(3)
print func_1(11)

위의 함수는 인자값을 받아 두수의 값을 더하는 예제이다.


위 예제의 결과는 아래와 같다.

result

14


func_1 = closure_outer(3)
func_2 = closure_outer(6)

print func_1(11)
print func_2(13)

위의 예제는 각각의 함수가 서로 다른 메모리를 공유하기 때문에 개별로 반영이 된다.


그렇다면 선언된 closure_outer를 제거하고 함수를 사용하면 결과가 어떻게 될까?


del closure_outer
print func_1(3)

이럴 경우 결과는 이미 메모리 상에 함수가 올라가 있기 때문에


해당함수를 삭제해도 사용할 수 있다.


'프로그래밍 > Python & dJango' 카테고리의 다른 글

[django] convert integer to string  (0) 2016.10.19
[dJango] Q expression  (0) 2016.10.19
Python 환경변수 가져오기.  (0) 2016.10.05
[Python] map, filter, reduce  (0) 2016.10.04
[dJango] compressor  (0) 2016.10.03