본문 바로가기

파이썬/2. 파이썬 심화

파이썬 클로저(closure)

클로저

  • 어떤 함수를 함수 자신이 갖고 있는 환경과 함꼐 저장한 레코드
  • 자신의 영역 밖 호출된 함수의 변수 값과 레퍼런스 저장, 캡쳐한 값에 액세스 제공
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를 참조해 값을 출력한다.

자세한 원리와 내용은 위 링크를 참고.