less than 1 minute read

본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.

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