파이썬의 일급 함수(First-Class Function)란?
파이썬은 일급 함수(first-class function)를 지원합니다. 실제로 파이썬의 모든 함수는 일급 객체이며, 이는 함수를 다른 일반 값과 동일하게 취급할 수 있다는 의미입니다.
따라서 파이썬에서는 다음과 같은 작업이 모두 가능합니다.
- 함수에서 또 다른 함수를 반환하기
- 리스트나 딕셔너리 같은 컬렉션에 함수를 저장하기
- 함수를 일반 변수나 객체처럼 전달하고 조작하기
특히 함수 내부에 다른 함수를 정의하고, 그 내부 함수를 외부로 반환하는 것도 아무런 제약 없이 구현할 수 있습니다.
예제 코드
아래 예제는 함수 안에 함수를 정의하고, 람다(lambda)를 통해 내부 함수를 반환하도록 작성한 코드입니다.
def f2(c, d):
return c, d
def f1(a, b):
c = a + 1
d = b + 2
return lambda: f2(c, d)
result = f1(1, 2)
print(result)
print(result())
출력 결과
<function f1.<locals>.<lambda> at 0x0000000003041CF8>
(2, 4)
코드 설명
실행 결과를 살펴보면 result에는 함수 객체 자체가 저장되어 있는 것을 확인할 수 있습니다. 즉, f1()을 호출한 시점에는 계산이 수행되지 않고 함수만 반환됩니다.
이후 result()처럼 반환받은 함수를 직접 호출해야 비로소 내부 로직이 실행되어 f2(c, d)의 결과인 (2, 4) 튜플이 출력됩니다.
이처럼 파이썬에서는 함수가 하나의 값처럼 다뤄지기 때문에, 함수를 반환값으로 사용하는 클로저(closure), 데코레이터(decorator) 등의 고급 패턴도 자연스럽게 구현할 수 있습니다.