[Python] Nested Function
Python에선 함수 내에 함수를 선언해서 사용 가능하다.
기존 C++같은 곳에서 class 내부에 class를 선언하는 것은 이미 존재하지만 함수 내 함수를 선언하는 기능은 없다.
def countdown(start): n = start def display(): print('T-minus %d' % n) while n > 0 : display() n -= 1 countdown(3)
T-minus 3 T-minus 2 T-minus 1 |
예상대로 출력이 된다. 만약 함수 내 local variable을 읽기만이 아니라 쓰기를 하게 되면 어떻게 될까?
def countdown(start): n = start def display(): print('T-minus %d' % n) def decrement(): # nonlocal n n -= 1 while n > 0 : display() decrement(); countdown(3)
T-minus 3 UnboundLocalError Traceback (most recent call last) in 9 decrement(); 10 —> 11 countdown(3) in countdown(start) 7 while n > 0 : 8 display() —-> 9 decrement(); 10 11 countdown(3) in decrement() 4 print(‘T-minus %d’ % n) 5 def decrement(): —-> 6 n -= 1 7 while n > 0 : 8 display() UnboundLocalError: local variable ‘n’ referenced before assignment |
위 처럼 n을 쓰려고 하면 error가 발생한다. 이를 위해서 nonlocal
이라는 매크로가 있는데, 이를 사용하면 가장 가까운 local variable을 수정할 수 있도록 한다.