반응형

nonlocal 문은 전역변수을 제외한 바로 위의 함수에서 사용되는 변수와 바인딩되어 참조하도록 합니다.

 

, nonlocal 문으로 선언되는 변수는 전역변수와 바인딩을 할 수 없습니다.

 

a = 10
 
def test1 ():
    nonlocal a
 
    a = 100
    print (a)
 
test1()
 
print (a)

 

위의 코드를 실행하면 아래와 같이 에러가 발생됨을 알 수 있습니다.

 

File "nonlocal_test1.py", line 4
    nonlocal a
    ^
SyntaxError: no binding for nonlocal 'a' found

 

사용된 함수 바로 한단계 바깥쪽에 위치한 변수와 바인딩을 할 수 있도록 코드를 수정하면

 

a = 10
 
def test1 ():
 
    a = 100
 
    def test2 ():
        nonlocal a   # test1() 함수에 영향을 미침
 
        a = 1000
 
    test2 ()
    print (a)
 
test1 ()
print (a)

 

Test2() 함수에서 nonlocal을 선언했으므로 test1() 함수의 a 변수의 값이 100에서 1000으로 변경됩니다.

 

실제 실행예를 보면, test2() 함수의 값이 1000이 출력되고, 나중에 전역변수의 값인 10이 출력됨을 알 수 있습니다.

 

1000
10
반응형
Posted by HLIFEINFO
,