일급함수 : 함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현한다.

함수를

변수, 데이터에 할당 가능

인자로 넘기기 가능

리턴 값으로 반환 가능

함수 내 정의 가능

# 함수를
# 변수, 데이터에 할당 가능
# 인자로 넘기기 가능
# 리턴 값으로 반환 가능
# 함수 내 정의 가능

def func():
    print('hello')

# 변수에 함수를 할당
func1 = func
func()
func1()
print('address of func : ', id(func))
print('address of func1 : ', id(func1))

# 함수 인자로 할당
def my(a):
    print('address of a : ', id(a))
    a()

my(func)    # a <- func : func()을 호출한다.

# 반환값으로 할당
def my1():
    return func
rst = my1()
rst()
print('address of return func : ', id(rst))

# 일급함수 - dictionary를 이용한 switch 문 제작
# 파이썬에서는 switch문이 없다

def a_func():
    print('a_func!')

def b_func():
    print('b_func!')

d = {0 : a_func, 1 : b_func}

menu = int(input('choose menu : ')) # 원하는 숫자 입력하면 정해진 대답이 나온다
d[menu]()    # index에 input값을 집어넣는다