[Python] - First Class

김진수·2020년 12월 9일
0
post-thumbnail

💻 일급 함수(first-class)

일급 함수(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함수의 설명인 ''' '''부분을 출력합니다.

함수 인수 전달 및 함수로 결과 반환 -> 고위 함수(Higher-order Function)

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형태로 저장됩니다.

📞 Callable(호출 연산자)

class에 __call__()를 오버로딩하면 class가 메서드 처럼 호출이 가능하게 된다.

결과값

위와 같이 객체를 생성하고 LottoGame()은 호출가능한 객체이므로 game도 호출이 가능합니다.
결과값을 보면 callable(game)은 game이 호출가능한가여? 묻는건데 결과값이 True인 것을 확인 할 수 있고, game()을 호출하면 __call__()이 호출되어 "hahaha"를 출력하는 것을 확인 할 수있습니다.

profile
백엔드 개발자

0개의 댓글