[파이썬 심화] 함수의 변수처럼 사용하는 법 - 일급객체 (First-class Citizen)
-
반응형
1. Question
함수는 프로그래밍 언어에서 다른 매개변수를 활용하여 반복적인 루틴을 하도록 만든 장치이다. C나 자바같은 언어에서는 변수는 변수, 함수는 함수로 완전히 분리되어 있다. add(a, b)라고 정의된 함수의 출력을 변수에 저장하는 것은 가능하나, 함수 그 자체 add를 변수에 할당하는 것은 불가능하다.
하지만, 파이썬에서는 이러한 것이 가능하다. 함수를 일급 객체 (Fist-class citizen)으로 취급해주기 때문이다.
일급 객체(First-class citizen)란, OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다.
변수 혹은 데이터 구조(자료구조) 안에 담을 수 있어야 한다.
매개변수로 전달할 수 있어야 한다.
리턴값으로 사용될 수 있어야 한다.
다른 일반적인 언어에서는 함수를 이용해서 1, 2, 3을 적용시키는 것은 상상도 할 수 없다. 파이썬에서 실제로 가능한지 실습해보자.
2. Practice
2.1 함수를 변수에 할당
def foo(a, b):
return a + b
f1 = foo
print(foo)
print(f1) # foo함수와 f1의 메모리 주소를 출력, 같은 주소를 가리킴
print(f1 is foo) # is 함수로 비교
print(f1(1, 2))
print(foo(1, 2))
def add(a, b):
return a + b
def sub(a, b):
return a - b
calc = [add, sub]
for i in calc:
print(i(10, 5)) # 15와 5를 출력
"""
출력
<function func1 at 0x000001A568285D38>
<function func1 at 0x000001A568285D38>
True
3
3
10
5
"""
함수를 변수에 할당하는 예제. foo 함수를 매개변수 없이 변수와 컨터이너 안에 할당하는 것이 눈에 띈다.
2.2 함수를 매개변수로 사용
def add(a, b):
return a + b
def add_manager(func, a, b): # 함수를 매개변수로 받음
print(func(a, b)) # 매개변수로 받은 함수를 통한 연산
add_manager(add, 1, 2) # 매개변수로 add함수를 전달하고 3을 출력하게 됨
"""
출력
3
"""