2021년 6월 15일 화요일

[파이썬] 로컬변수가 아님을 선언하기 위한 nonlocal 키워드

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

 

댓글 없음:

댓글 쓰기