[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 |