Python의 함수는 값이며, 몇 가지 추가적인 특징(변수 할당, 매개변수 전달, 반환값으로 사용 가능 등) 때문에 일급 객체
로 분류할 수 있습니다. Python은 함수 안에 함수를 정의할 수 있으며, 그렇게 정의된 내부 함수는 외부 함수의 문맥에 접근할 수 있습니다. 쉽게 말하면, 외부 함수가 가지고 있는 지역변수에 접근할 수 있다는 것입니다.
calculator
라는 함수를 정의했고, 이 함수는 두 개의 인자를 받아 처리하는 함수 fn, 두 정수 a, b를 받습니다. 함수 내부에는 sum
함수가 정의되어 있습니다.
- 만약 fn이 전달되었다면(if fn) 인자 a와 b를 전달하며 해당 함수 fn을 호출하고, fn의 반환값을 반환합니다.
- 만약 fn이 전달되지 않았다면(else) 내부 함수인 sum을 호출합니다.
함수의 인자로 함수를 전달하는 일은 낯설지 않지만, calculator
함수의 내부 함수인 sum
함수는 아무 인자를 받지 않았음에도 변수 a와 b에 접근할 수 있습니다. 이처럼 내부 함수가 외부 함수의 지역변수에 접근할 수 있는 것을 클로저(Closure)
라고 하며, 데코레이터와 같은 Python의 고급 개념들을 위해 필수적으로 사용됩니다.
'Python 계열 > Python 레거시 글' 카테고리의 다른 글
[Python] Iterable, Sequence, Iterator (0) | 2018.07.22 |
---|---|
[Python] Decorator (0) | 2018.07.21 |
[Python] 문자열의 메모리 할당 방식 (0) | 2018.07.19 |
[Python] 함수 인자의 기본값 평가 (0) | 2018.07.14 |
[Python] @property와 setter (0) | 2018.07.13 |