반응형
질문
파이썬 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
반응형
댓글