Python 퍼스트클래스 함수(First Class Function) 이해하기
퍼스트 클래스 함수(First-Class function)란?
- 프로그래밍 언어가 함수를 first-class citizen으로 취급하는것을 뜻한다
- 쉽게 말하자면 함수 자체를 인자(argument)로써 다른 함수에 전달하거나 다른 함수의 결과값으로 리터 할수도 있고, 함수를 변수에 할당하거나 데이터 구조안에 저장할 수 있는 함수를 뜻한다
- first class object 로서의 함수 를 줄여서 first class function 이라는 용어가 널리 사용되지만, 사실상 파이썬에서 모든 함수는 first-class이다
- 런타임에 생성할 수 있다
- 데이터 구조체의 변수나 요소에 할당할 수 있다
- 함수 인수로 전달할 수 있다
- 함수 결과로 리턴할 수 있다
- 위와 같은 작업을 수행할 수 있으면 프로그램 개체를 first-class로 정의한다
퍼스트 클래스 함수의 장점
- 이미 정의된 여러 함수를 간단히 재활용 할 수 있다
1~5까지의 정수를 입력받아 제곱해서 결과를 리턴해주는 함수의 예
1
2
3
4
5
6
7
8
9
def square(arr):
result = []
for i in arr:
result.append(i*i)
return result
num = [1,2,3,4,5]
print(square(num))
>> [1, 4, 9, 16, 25]
거듭제곱을 만드려면?
제곱, 세제곱 … 각각의 함수를 만들어야 하나?
퍼스트 클래스를 이용한 거듭제곱 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def squre(x):
return x*x
def cube(x):
return x*x*x
def quad(x):
return x*x*x*x
def power(func, arr):
result = []
for i in arr:
result.append(func(i))
return result
num = [1,2,3,4,5]
print(power(square, num))
>> [1, 4, 9, 16, 25]
print(power(cube, num))
>> [1, 8, 27, 64, 125]
print(power(quad, num))
>> [1, 16, 81, 256, 625]
- 위처럼 이미 정의되어 있는 함수
squre
,cube
,quad
처럼 여러개의 함수나 모듈이 있다고 가정했을 때power
같은 wrapper 함수를 하나만 정의해서 기존의 함수나 모듈을 수정할 필요없이 편리하게 쓸 수 있다.
Wrapper 함수란?
다른 함수에 약간의 기능을 덧씌워 사용하는 함수
주로 별다른 연산없이 다른 함수나 시스템 콜을 호출하는것이 주 역할
참고사이트