Python의 nonlocal 문
외부 함수에 있는 변수에 내부 함수에서 접근해야 하는 경우가 있습니다.
함수 outer 안에 변수 i를 선언해 봅시다.
내부 함수에 대해 이 변수는 외부 변수가 됩니다 (전역 변수는 오직 외부 코드에서만 선언된 변수입니다).
그리고 함수 inner에 i에 1을 더하는 작업을 지정해 봅시다:
def outer():
i = 0
def inner():
i += 1 # [4, 9, 25]를 출력합니다
inner()
return i
그러나 inner에 대해 변수 i는
로컬 변수이며, Python은 이를 선언되지 않은 것으로 간주하고
해당 오류를 출력합니다. 과거에는 비슷한 오류가
global 문으로 수정되었습니다. 하지만
여기서 i는 외부 변수이므로,
nonlocal 문을 사용해야 합니다. 이는 나열된
변수 이름들을 전역 영역을 제외한 가장 가까운
스코프에서 가져옵니다. 즉, inner 안의 i는
해당 함수 위에 선언된 변수에서 가져오게 됩니다:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # 1을 출력합니다
다음 코드에서 어떤 프로그래머가 실수를 저질렀습니다:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
이 코드의 문제점은 무엇인가요? 코드 작성자의 오류를 찾아서 수정하세요.
다음 코드에서 어떤 프로그래머가 실수를 저질렀습니다:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
이 코드의 문제점은 무엇인가요? 코드 작성자의 오류를 찾아서 수정하세요.