클로저
- 어떤 함수를 함수 자신이 갖고 있는 환경과 함꼐 저장한 레코드
- 자신의 영역 밖 호출된 함수의 변수 값과 레퍼런스 저장, 캡쳐한 값에 액세스 제공
def out():
message = 'Hi'
def in():
print message
return in
func = out()
func()
# Hi
out이란 함수를 실행하면 in 이라는 함수를 return 한다.
그 in을 func에 넣고 실행해보면
Hi가 출력된다.
분명 in은 전달받는 인자도 없고
내용은 print message뿐인데
어떻게 Hi를 출력할까?
http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%81%B4%EB%A1%9C%EC%A0%80-closure/
답은 closure에 있다.
closure가 자신의 환경을 저장하고 있었기 때문.
영역 밖에서 호출된 변수값과 레퍼런스를 복사하고 저장하기 때문에
함수 내부에 내용이 없더라도 closure를 참조해 값을 출력한다.
자세한 원리와 내용은 위 링크를 참고.
'파이썬 > 2. 파이썬 심화' 카테고리의 다른 글
파이썬 map, filter, reduce (0) | 2020.04.27 |
---|---|
파이썬 게으른 연산(lazy evaluation) (0) | 2020.04.27 |
파이썬 람다 함수(lambda) (0) | 2020.04.23 |
파이썬 데코레이터(Decorator) + *args, **kwargs (0) | 2020.04.23 |
파이썬 반복자와 생성자(Iterator, Generator) (0) | 2020.04.21 |