Decorator에 대해 공부하면서 first class funtion에 대해 접하게 되었다. 이번 posting을 통해 first class function에 대해 정리하고자 한다.
Programming 언어가 function을 일급 객체(first class citizen)으로 취급하는 것을 뜻한다.
즉, 함수 자체를 인자(argument)로써 다른 함수에 전달하거나 다른 함수의 결과 값으로 return 할 수도 있고, 변수에 할당하거나 data 구조안에 저장할 수 있는 함수를 뜻한다.
First class citizen?
👉 아래와 같은 조건을 만족시키는 객체를 뜻한다.
- 변수나 data 구조 내에 담을 수 있다.
- 인자(argument)로 전달이 가능하다.
- Return 값으로 사용할 수 있다.
변수에 function을 할당
- func 변수에 square 함수를 할당하였고, func(3)으로 함수를 호출하였더니 값이 9가 나왔다.
def square(x): return x * x func = square print(func(3)) #result = 9
Argument로 전달
- 한 함수에서 함수를 parameter로 받을 시 여러 함수를 argument로 하여 재활용할 수 있다.
def square(x): return x * x def cube(x): return x * x * x def quad(x): return x * x * x * x def my_map(func, arg_list): result = [] for i in arg_list: result.append(func(i)) # square 함수 호출, func == square return result num_list = [1, 2, 3, 4, 5] squares = my_map(square, num_list) cubes = my_map(cube, num_list) quads = my_map(quad, num_list) print(squares) #[1, 4, 9, 16, 25] print(cubes) #[1, 8, 27, 64, 125] print(quads) #[1, 16, 81, 256, 625]
함수 내에서 다른 함수를 return
- 함수 내에 또 다른 함수가 있고 바깥 함수의 return 값에 내부 함수를 두어 return 한다.
def logger(msg): def log_message(): # 1 print('Log: ', msg) return log_message log_hi = logger('Hi') print(log_hi) # log_message object가 출력됩니다. log_hi() # "Log: Hi"가 출력됩니다.
📖 출처 :
일급 함수에 대해 이번 posting을 통해 알아보았다. 일급 함수 & 객체 개념이 closure, decorator, generator를 학습하는데 기초 개념이라고 한다. 이 개념을 바탕으로 다음 단계의 개념에 대해서도 알아보도록 하겠다.