파이썬은 함수 안에 새로운 함수를 정의할 수 있습니다. 이를 내부 함수라 합니다.

def outer(a, b):
    def inner(c, d):
        return c + d
    return inner(a, b)

 

이때, 내부 함수로 인해서 생기는 중요한 이슈가 있습니다.

  1. '내부 함수'는 자신의 스코프를 벗어나서 '외부 함수'의 변수에 접근할 수 있다.
  2. '내부 함수'는 '외부 함수'의 반환 값으로 사용될 수 있다.

 

위의 이슈를 담고 있는 예제를 살펴보겠습니다.

def print_msg(msg):
    def inner():
        print(msg);
    return inner

 

print_msg() 함수가 종료되면 매개변수로 넘어온 msg는 사라져야되는데 '내부 함수'에서 해당 변수를 참조하고 있습니다. 거기다 print_msg() 함수는 내부 함수 객체를 리턴합니다. 내부 함수가 외부 함수의 지역 변수를 참조함으로써 외부 함수가 소멸된 이후에도 소속 지역 변수가 사라지지 않는 이슈를 클로저(Closure)라고 합니다.

'Programming > Python' 카테고리의 다른 글

[Python] 파일 입출력  (0) 2019.06.11
[Python] private 네임 맹글링  (0) 2019.06.10
[Python] 클래스(class)  (0) 2019.06.10
[Python] 컴프리헨션(Comprehension)  (0) 2019.06.07
[Python] list, tuple, dictionary, set 자료구조  (0) 2019.06.05