티스토리 뷰

Image result for first class function





프로그래밍 언어가 first class function을 갖는다는건,

function을 value, variable과 동일하게 다룬다는 것이다. 

즉 function을 함수 인자로도 넘길 수 있고, 리턴할 수 있고, 변수에 저장할 수 있을때, 그 언어는 first class function을 갖는다고 말할 수 있다.




Image result for closure

closure란 first class function을 감싸고 있는 environment를 first class function과 묶는 기법을 말하거나

first class function과 environment 저장하고 있는 record를 의미한다.


closure의 의미를 글로 표현하면 이해하기 어렵고 파이썬 예제를 통해 알아보도록 하자.


먼저 함수를 리턴하는 함수(higher-order function)를 정의한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
def add(x):
   def addX(y):
       return y + x
   return addX
 
 
 
add1 = add(1-> 1과 y를 더하는 함수 addX를 add1에 저장
add5 = add(5-> 5와 y를 더하는 함수 addX를 add5에 저장
 
 
print add1(1-> 2를 출력
print add5(1-> 5를 출력
cs

보통 add 함수 인자인 x의 값은 함수 호출이 시작해서 끝날때까지만 유효하다.

보통 add 함수 인자인 x의 값은 함수 호출이 시작해서 끝날때까지만 유효하다.

그렇지만, python은 closure를 지원하는 언어이기 때문에, 

first class function인 addX를 리턴할 때 addX의 environment 즉 x의 value를 같이 저장하는 closure가 리턴되는 것이고

add1(1)를 호출하면 1 + 1 = 2가 리턴되고,

add5(1)를 호출하면 5 + 1 = 6이 리턴되는 것이다.



Partial function

아래 예제를 살펴보자

1
2
3
4
5
6
7
8
9
10
11
12
13
def add(a, b):
    return a + b
 
def partial_func(a):
    def add_fixing_a(b):
        return add(a, b)
    return add_fixing_a
 
add3 = partial_func(3)
add5 = partial_func(5)
 
print add3(1)
print add5(1)
cs


add 함수는 두 개의 인자 a, b를 받아서 두 값을 더한 값을 리턴하는 함수이다.

partial function은 함수의 일부 인자를 특정한 값으로 고정하고, 나머지 인자들만 받는 함수를 의미하는데

위 예제에서 partial_func(3)를 호출함으로써 add 함수의 첫번째 인자 a의 값을 3으로 고정하는 add3 함수를 만들어 내는 것을 볼 수 있다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
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 26
27 28 29 30 31
글 보관함