0. Introduction
- 이번 시간에 배울 내용은 특히 더 중요하다.
- 이번 시간에는 일급 객체라고도 불리는
일급 함수에 대해 알아보겠다. - 그 후,
일급 함수의 예인 lambda, callable, partial에 대해 알아본다.
1. 일급 함수(first-class)란??
- 일급 함수(일급 객체, first-class)란??
- 객체 취급되는 함수
- 다음 4가지 특징을 가지는 함수를 말한다.
- 1. 런타임 초기화: 실행 시점에서 초기화한다.
- 2. 함수를 변수에 할당 가능하다.
- 3. 함수를 인수로 전달 가능하다. (Higher - order function의 첫 번째 특징)
- 4. 함수를 결과값으로서 반환 가능하다. (Higher - order function의 첫 번째 특징)
위 일급 함수의 특징들은
파이썬 함수의 특징이라고 할 수 있다.그러면 일급함수는 왜 중요한가??
- 일급함수를 알아야 ‘함수형 프로그래밍’ 을 할 수 있기 때문이다.
- ‘함수형 프로그래밍’ 이란??
- side effect를 허용하지 않는 순수 함수(pure function)를 지향하여 동시에 여러 thread에서 문제 없이 동작하는 프로그램을 쉽게 작성하는 방식
이러한 이유로
일급 함수에 대해 알아보자.일급 함수가 가지는 특징을 모두 예제로 구현해볼 것이다.
1.1 객체 취급되는 함수
객체란 무엇인가???
- [TIL] Python basic 14: class에 따르면 소프트웨어로 구현할 대상이라 했다.
하지만 파이썬 내부에서의 객체의 정의와 특징은 무엇일까???
파이썬이 data를 추상화(abstraction)한 것을 말하며,
id(identity), type(형) 그리고, value(값)을 가dd지는 걸 말 한다.
파이썬의 모든 데이터는 객체나 객체 간의 관계로 표현된다.
객체 id는 메모리 상에서 객체의 주소이며, id는 만들어진 후에는 변경되지 않는다.
- from 데이터 모델: 객체
attribute란 점표현식을 사용하는 이름으로 참조되는 객체와 결합한 값(value)
함수 객체 : 함수처럼 행동하는 객체 from 함수 객체의 장점
그럼 코드 상에서 확인해보자.
| |
1.2 변수로 할당되는 함수
- 함수 또한 객체로 취급되는 걸 확인했다.
- 다음으로 이 함수가 변수에 할당되는지 확인해보자.
| |
- 변수에 할당되어 여러 함수에 사용될 수 있다는 걸 확인했다.
1.3 고위 함수의 두 가지 특징
Higher - order function (고위함수)의 특징
- 1. 함수를 인수로 전달 가능하다.
- 2. 함수를 결과값으로서 반환 가능하다.
고위 함수의 대표적인 예로는
map,filter,reduce,lambda등이 있다.그러면 코드로 확인해보자.
| |
reduce: 여러 원소를 하나의 원소로 줄이기 위해, 왼쪽에서부터 오른쪽 방향으로 축적하며 함수를 적용해간다.
| |
2. High - order functions
2.1 익명 함수(lambda)
이름 없는 함수로, 익명 함수다. 그래서 익명 함수가 복잡할 때, 주석을 사용해야 한다.
하지만, 되도록 함수를 만들어서 사용하자. 일반 함수 형태로refactoring을 권장한다.
| |
2.2 Callable
호출 연산자로 함수, 클래스 인스턴스, 메서드 등이 호출 가능한지 확인하는 함수다. 이를 구체적으로 확인하는 방법은 specail method인
__call__method의 존재 유무를 확인하는데, 이 method가 있으면 True다.
from What is a ‘callable’
- 호출한다는 건 무슨 의미일까???
| |
- 이를
callable로 확인해보자.
| |
3.14는 호출할 수 없다는 걸callable을 통해 간단히 확인했다.
2.3 Partial
인수를 고정할 때 사용하는 함수로, 콜백 함수에 사용하기 때문에 매우 중요하다.
- 코드로 알아보자.
| |
2.4 Signature
signature(callable, *, follow_wrapped=True) 형식으로 인자로 callable을 취하고, annotation을 반환한다.
signature함수는inspectmodule에서 import한다.inspectmodule은- 모듈은 모듈, 클래스, 메서드, 함수, 트레이스백, 프레임 객체 및 코드 객체와 같은 라이브 객체에 대한 정보를 얻는 데 도움이 되는 몇 가지 유용한 함수를 제공한다.
- 예를 들어
- 클래스의 내용을 검사하거나,
- 메서드의 소스 코드를 꺼내오거나,
- 함수의 인자 리스트를 추출하고 포맷하거나,
- 자세한 트레이스백을 표시하는 데 필요한 모든 정보를 얻는 데 도움이 될 수 있다.
- from Inspect: 라이브 객체 검사
| |