일급 함수(first-class)는 객체 지향 프로그래밍(object-oriented programming) 중에서 파이썬을 포함한 몇몇 프로그래밍 언어에서 발견할 수 있는 개념이고, 모든 것은 객체다라는 개념이다. 객체는 숫자, 문자열, 튜플, 리스트, 딕셔너리, 그리고 함수를 포함한다 함수는 그 중에서도 일급 시민이다.
이 뜻은
입니다.
위에 함수를 이용해서 일급함수를 설명하겠습니다.
python 일급함수의 특징인 함수를 변수에 할당하고 출력합니다.
var_func = factorial
이 코드는 위에서 선언한 factorial함수를 변수에 저장하는 것입니다.
var_func을 통해 factorial함수를 사용할 수 있습니다.
print('ex2-2 -', var_func(5))
-result-
120
var_func(5)은 factorial에 5를 대입하는 것과 같습니다.
print('ex1-2 -', factorial.__doc__)
은 factorial함수의 설명인 ''' '''부분을 출력합니다.
python 일급함수의 특징인 함수를 인수로 전달하고 함수로 결과를 반환하고 출력합니다.
print('ex2-3 -', list(map(var_func, range(1,6))))
var_func함수를 map함수 인자로 넣어지고 있는 것을 확인할 수 있습니다. 이 함수는 range(1,6)이 순서대로 1,2,3,4,5가 var_func내의 저장되어 있는 factorial내의 넣어지면서 값이 넣어지면서 출력되는데 list형태로 출력이 됩니다.
print('ex3-1 -', list(map(var_func, filter(lambda x: x%2, range(1,6)))))
filter를 통해 range(1,6)인 1,2,3,4,5가 x에 대입되고 x%2가 true이면 값이 var_func함수의 넣어지고 최종적으로 값이 list형태로 출력이 됩니다.
print('ex3-2 -', [var_func(i) for i in range(1,6) if i%2])
위 코드와 같은 결과값을 출력합니다. 이것도 range(1,6)인 1,2,3,4,5가 if i%2에 i에 대입되고 i%2가 true이면 var_func(i)에 i에 넣어지고 최종적으로 테두리의 []를 통해 값이 list형태로 저장됩니다.
class에 __call__()를 오버로딩하면 class가 메서드 처럼 호출이 가능하게 된다.
결과값
위와 같이 객체를 생성하고 LottoGame()은 호출가능한 객체이므로 game도 호출이 가능합니다.
결과값을 보면 callable(game)은 game이 호출가능한가여? 묻는건데 결과값이 True인 것을 확인 할 수 있고, game()을 호출하면 __call__()이 호출되어 "hahaha"를 출력하는 것을 확인 할 수있습니다.