일급함수 (First Class Function)

  • 함수를 변수로 생각하는 것
  • 함수 자체를 인자(argument)로써 다른 함수에 전달, 다른 함수의 결과값으로 반환, 함수를 변수에 할당할 수 있음

함수를 변수에 할당

def double_func(x):
    return x * 2

a = double_func

print(double_func)	# 결과: <function double_func at 0x000002A8AB8D21F8>
print(a)			# 결과: <function double_func at 0x000002A8AB8D21F8>
print(a(5))			# 결과: 10

함수를 전달 인자로 사용

from typing import Callable, List


def double_func(x):
    return x * 2


def make_double_list(func:Callable, args:List) -> List:
    result = []
    for i in args:
        result.append(func(i))

    return result


input_list = [1, 2, 3, 4, 5]
doubles = make_double_list(double_func, input_list)
print(doubles)

함수내의 함수 선언

import time

def log_formatter(msg):
    def log_message():
        time_str = time.strftime('%c', time.localtime(time.time()))
        print(time_str, end='')
        print('------>', end='')
        print(msg)

    return log_message


log_msg = log_formatter('test log')
print(log_msg)
log_msg()
# 결과
<function log_formatter.<locals>.log_message at 0x000002A8ABB634C8>
Wed Jul 15 10:20:37 2020------>test log