중첩 함수
함수 안에 생성한 함수. 즉, Python은 함수 정의 안에 다름 함수를 정의할 수 있다.
def print_hello():
hello = 'Hello, world!'
def print_message():
print(hello)
print_message()
print_hello()
print_hello() 함수 내에서 정의한 중첩 함수 print_message()는 선언한 함수 내에서 호출해도 실행되지 않는다. 바깥의 print_hello()가 호출되어야 중첩 함수가 실행된다.
지역 변수 범위
중첩 함수 print_message()는 print_hello()의 지역 변수 hello를 사용할 수 있다.
nonlocal
전역 변수와 비슷하게, 중첩된 함수의 바깥쪽 함수의 지역 변수를 안쪽 함수에서 변경하기 위해서는 nonlocal 키워드를 사용해야 한다.
키워드 없이 print_hello()의 지역변수 hello를 print_message() 내에서 다시 초기화하면, 두 변수는 이름만 같을 뿐 다른 변수로 취급된다.
def print_hello():
hello = 'Hello, world!'
def print_message():
hello = 'Hello'
print(hello)
print_message()
print(hello)
print_hello()
nonlocal은 현재 함수의 지역 변수가 아니라는 의미이다. print_message() 함수 내에서 hello 변수 앞에 nonlocal 키워드를 붙이면, 바깥쪽 함수의 지역 변수를 사용할 수 있다.
def print_hello():
hello = 'Hello, world!'
def print_message():
nonlocal hello
hello = 'Hello'
print(hello)
print_message()
print(hello)
print_hello()
nonlocal 키워드를 사용하면 사용한 함수로부터 가장 가까운 함수에서부터 지역 변수를 찾는다.
+ global 키워드를 사용하면 함수 중첩이 몇 단계든 전역 변수를 사용한다.
참고 문서
https://dojang.io/mod/page/view.php?id=2365