first-class function

김루트·2021년 4월 11일
0

Python 학습

목록 보기
6/6

파이썬의 데코레이터 개념에 대해 알아보기에 앞서, "first-class function"과 "closure"에 대해서 나름대로 학습했다. 부정확하지만 지금까지 이해한 바를 기록해두려고 한다.

#### A programming language is said to have First-class functions when functions in that language are treated like any other variable. [출처](https://developer.mozilla.org/en-US/docs/Glossary/First-class_Function)
즉, 어떤 프로그래밍 언어에서 함수가 문자형, 숫자형 등과 같은 여타 변수들과 동일하게 취급된다면 그 언어는 "1급 함수"를 가진다고 간주된다. 아래의 코드는 [유튜브 강좌](https://www.youtube.com/watch?v=kr0mpwqttM0)를 참조했음을 미리 밝힌다.
def square(x):
	return x*x
f = square
print(f(6))

위의 간단한 예제에서, square는 인자의 제곱을 리턴하는 함수이지만, 동시에 f 라는 변수에 할당될 수도 있다. 일반적으로는 f=square(5) 등과 같이 함수에 인자를 넣은 상태만을 떠올리겠지만, 괄호 "()"를 붙이지 않으면 함수는 실행되지 않으며, 위와 같이 변수에 함수를 저장하는 것이 가능하다. 이는 파이썬 쉘에서 간단히 확인할 수 있다.

>>> def square(x):
...     return x*x
...
>>> f=square
>>> print(square)
<function square at 0x7f9a281b1040>
>>> print(f)
<function square at 0x7f9a281b1040>

그렇기 때문에 f(5)을 쉘에서 입력한다면, square(5)와 같은 결과를 출력할 것이다.

def square(x):
	return x*x
   
def cube(x):
	return x*x*x

위의 두 함수 square, cube는 각각 인자의 제곱과 세제곱을 반환한다.

def my_map(func, arg_list):
	result=[] ..........................(1)
    for i in arg_list:
    	result.append(func(i))..........(2)
    return result.......................(3)
 
 cubes = my_map(cube, [1,2,3,4,5])
 print(cubes)

my_map이라는 함수는, func라는 함수와, arg_list라는 리스트를 인자로 받는다. 순서대로 위 코드를 살펴보자면 다음과 같다.

(1)에서 빈 리스트를 만든다.
(2) arg_list라는 배열 안의 각 요소 i에 대해, 이를 인자이자 함수인 func에게 집어넣는다. 거기서 반환(저장)된 값을 가져와 빈 리스트에 더한다.
(3) 빈 리스트인 result에 (2) 에서 더한 값을 저장한다 (함수를 실행하지는 않고 단순히 결과만을 저장한다)

그렇기 때문에 앞서 정의한 cube 함수를 인자로 취하면 [1,8,27,64,125]라는 결과가 출력되겠지만, 만약 square 함수를 my_func 함수의 인자로 대입했다면 [1,4,9,16,25] 라는 결과가 출력되었을 것이다.

profile
반갑습니다.

0개의 댓글