본문 바로가기
Python/Python FAQ

Python 파이썬 3에서 "nonlocal"은 어떤 역할을 하는가요?, What does "nonlocal" do in Python 3?

by 베타코드 2023. 11. 11.
반응형

질문


파이썬 3.x에서 nonlocal은 무엇을 하는가요?


OP가 nonlocal이 필요하다는 것을 깨닫지 못하고 디버깅 질문을 닫을 때는, 대신 외부 범위에서 변수를 수정할 수 있는가요?를 사용해주세요.

파이썬 2는 2020년 1월 1일부로 공식적으로 지원이 종료되었지만, 만약 어떤 이유로 인해 여전히 파이썬 2.x 코드를 유지해야하고 nonlocal에 해당하는 기능이 필요하다면, Python 2.x에서의 nonlocal 키워드를 참조하세요.


답변


이것을 사용하지 않고 비교해보면 nonlocal을 사용한 경우:

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)

# inner: 2
# outer: 1
# global: 0

이것을 사용하여 nonlocal을 사용하면, inner()x는 이제 outer()x와 같습니다:

x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)

# inner: 2
# outer: 2
# global: 0

만약 우리가 global을 사용한다면, x는 올바른 "전역" 값에 바인딩됩니다:

x = 0
def outer():
    x = 1
    def inner():
        global x
        x = 2
        print("inner:", x)
        
    inner()
    print("outer:", x)

outer()
print("global:", x)

# inner: 2
# outer: 1
# global: 2
반응형

댓글