-
Python | Python 일급 함수(First Class function)python 2022. 1. 26. 14:11
파이썬의 일급 함수에 대해서 정리해 보려고 합니다.
특정 프로그래밍 언어에서 함수가 일급이라는 것은 다음의 조건을 만족하는 경우 일급 함수라고 합니다.
- 함수가 object 유형의 인스턴스인 경우.
- 함수를 변수에 저장할 수 있는 경우.
- 함수를 다른 함수에 매개변수로 전달할 수 있는 경우.
- 함수에서 다른 함수를 반환할 수 있는 경우.
- list, dict 등과 같은 데이터 구조에 저장할 수 있는 경우.
각각을 예시를 통해 확인해 보도록 하겠습니다.
함수가 object 유형의 인스턴스인 경우.
먼저 간단한 예시로 변수에 1을 할당해 보겠습니다.
num = 1 # 변수에 1을 할당 print(type(num)) # <class 'int'> print(issubclass(int, object)) # True
후 타입을 확인해보면 int라는 클래스이고, int클래스는 object를 상속받는 것을 확인할 수 있습니다.
따라서 동일하게 확인을 해보면
def im_object(): return 'Im object' print(type(im_object)) # <class 'function'> print(isinstance(im_object, object)) # True
위와 같이 함수가 object유형의 인스턴스인 것을 확인할 수 있습니다.
함수를 변수에 저장할 수 있는 경우.
def im_object(): return 'Im object' v_func = im_object # 변수에 저장 print(v_func()) # Im object
함수를 변수에 저장하여 해당 변수로 함수를 실행할 수 있습니다.
함수를 다른 함수에 매개변수로 전달할 수 있는 경우.
def relay_func(msg): return f'>> sub : {msg}' def main_func(func): print('>> run main') print(func('hello')) main_func(relay_func) # >> run main # >> sub : hello
메인 함수에 relay_func을 매개변수로 전달하여 메인 함수 내에서 relay_func함수를 실행하는 예제입니다.
다른 예시로 자주 사용되는 map함수에서도 매개변수로 전달하여 사용할 수 있습니다.
# map에 함수를 전달 result = list(map(relay_func, 'ABCDE')) print(result) # ['>> sub : A', '>> sub : B', '>> sub : C', '>> sub : D', '>> sub : E']
함수에서 다른 함수를 반환할 수 있는 경우.
def create_adder(x): def adder(y): return x + y return adder adder_100 = create_adder(100) print(adder_100(10)) # 110 print(adder_100(20)) # 120 print(adder_100(30)) # 130
create_adder함수에서는 adder라는 다른 함수를 반환하고 있는 걸 확인할 수 있습니다.
list, dict 등과 같은 데이터 구조에 저장할 수 있는 경우.
def adder_1(x): return x + 1 def adder_2(x): return x + 2 def adder_3(x): return x + 3 adder_dict = {'one':adder_1, 'two': adder_2, 'three': adder_3} adder_list = [adder_1, adder_2, adder_3] print(adder_dict) print(adder_list) print(adder_dict.get('one')(100)) # 101 print(adder_list[1](100)) # 102
위와 같이 list, dict형태에 저장 가능한 것을 확인할 수 있습니다.
마무리
일급 함수에 대한 내용은 파이썬뿐만 아니라 다은 프로그래밍 언어에도 적용이 되는 내용인 것 같습니다.
함수형 프로그래밍을 할 때 일급 함수에 대한 내용이 나오는데, 일급 함수에 대한 내용을 따로 정리해 볼 수 있는 시간이었던 것 같습니다.
감사합니다.
참고자료
https://www.w3schools.com/python/python_classes.asp
https://www.geeksforgeeks.org/first-class-functions-python/
https://stackoverflow.com/questions/27392402/what-is-first-class-function-in-python
https://www.tutorialspoint.com/first-class-citizens-in-python
'python' 카테고리의 다른 글
Python | Python 데코레이터(Decorator) (0) 2022.01.26 Python | Python 내부 동작과정 (0) 2022.01.24 Python | Class에 대해서 (0) 2022.01.23