Python

[Python] 중첩 함수

비번변경 2022. 10. 3. 23:22

중첩 함수

함수 안에 생성한 함수. 즉, 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 없이 지역 변수 사용

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

nonlocal 키워드를 사용하면 사용한 함수로부터 가장 가까운 함수에서부터 지역 변수를 찾는다.

 

+ global 키워드를 사용하면 함수 중첩이 몇 단계든 전역 변수를 사용한다.

 

 

참고 문서

https://dojang.io/mod/page/view.php?id=2365