[Python] 23. 네스티드 함수와 클로저
본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.
23-1. 함수를 만들어서 반환하는 함수
네스티드 함수: 함수 안에 정의된 함수
def maker(m):
def inner(n):
return m * n
return inner
f1 = maker(2)
f1(7)
(결과) 14
23-2. 클로져
위 예제에서 m은 maker 함수 안에서만 존재하는 변수이다. 그렇다면, maker 함수 밖에서도 m이 유효할까?
결과적으로는 예제에서 정의한 inner 함수가 변수 m의 값을 어딘가에 저장해 놓고 쓴다!
클로져: 안쪽에 위치한 네스티드 함수가 자신이 필요한 변수의 값을 어딘가에 저장해 놓고 쓰는 테크닉!
def maker(m):
def inner(n):
return m * n
return inner
f1 = maker(111)
f1.__closure__[0].cell_contents # 변수 m의 값을 저장해 놓은 위치이다!
(결과) 111
위 예제에서 보다시피, 네스티드 함수 inner가 변수 m의 값을 저장해 놓은 위치는 __closure__ 변수의 인덱스 0 위치에 저장된 객체의 변수인 cell_contents 이다!
Leave a comment