Programming,  Python

[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을 수정할 수 있도록 한다.

Leave a Reply

Your email address will not be published. Required fields are marked *