-
[Fluent Python]일급 함수Programming/Python 2023. 6. 12. 10:17
파이썬에서 함수는 일급 객체로 다루어진다.
function.doc 는 객체의 도움말 텍스트를 생성하기 위해 사용한다.
help(function) 명령은 함수 객체 docstring으로 나열된 부분을 표시한다.
일급 함수가 있으면 함수형 스타일로 프로그래밍 할 수 있다.
고위 함수 ⇒ 함수를 인수로 받거나, 함수를 결과로 반환하는 함수
list.sort() 와 sorted() 내장 함수도 일급 함수의 예다.
def reverse(word): '''해당하는 word를 역순으로 리턴''' return word[::-1] # fruits 리스트를 아이템을 뒤집은 상태에서 사전 순으로 정렬 sorted(fruits, key=reverse) # 고위 함수는 함수를 인자로도 받는다.
map(), filter(), reduce() 의 대안
⇒ 지능형 리스트와 제너레이터 표현식이 소개된 후에는 이 함수들의 중요성이 떨어짐
list(map(fact, range(6)) [fact(n) for n in range(6)] list(map(fact, filter(lambda n : n % 2, range(6))) [fact(n) for n in range(6) if n % 2]
reduce() 의 경우 내장 함수 sum() 을 사용하는 것이 가독성과 성능 면에서 훨씬 낫다.
(sum() 과 reduce() 는 연속된 항목에 어떤 연산을 적용해서, 이전 결과를 누적시키면서 일련의 값을 하나의 값으로 리뎍션 한다는 공통점이 있다.)
다른 내장된 리덕션 함수 , all(), any() all은 모든 iterable이 참된 값이면 True 반환 any는 iterable 중 하나라도 참된 값이면 True
익명 함수(고위 함수의 인수로 사용하는 방법 외에는 익명 함수는 파이썬에 거의 사용되지 않음)
lambda 키워드는 파이썬 표현식 내에 익명 함수를 생성한다.
(순수한 표현식으로만 구성되도록 제한한다. while, try 등의 파이썬 문장은 사용이 불가)
콜러블 객체 ⇒ “()” 이거임
호출 가능한 객체인지 알기 위해서는 callable() 내장 함수를 사용
- 사용자 정의 함수
- 내장 함수
- 내장 메소드
- 메소드
- 클래스
- 클래스 객체
- 제너레이터 함수
[callable(obj) for obj in [abs, str, 13]] [True, True, False]
사용자 정의 콜러블형
파이썬 모든 객체가 함수처럼 동작하게 만들려면 call() 인스턴스 메소드 구현만 하면된다.
데코레이터는 함수지만 때때로 호출된 후의 상태를 기억할 수 있는 기능이 유용하게 사용된다(메모제이션)
위치 매개변수에서 키워드 전용 매개변수
함수에 어떤 매개변수가 필요한지, 매개변수에 기본값이 있는지 없는지 아는 방법
defaults 를 사용 시 기본 값이 나오고
code.co_varnames 는 함수 내에 선언된 지역 변수가 나온다.
code.co_argcount 는 인수의 카운팅이 되어진다. * **은 포함하지 않는다.
inspect.signature() 를 이용해서 아는 방법도 있다.
operator 에서는 여러개의 익명함수를 제공한다.
functools.partial()로 인수 고정하기
triple = partial(mul, 3)
으로 할 시 mul에 3 이라는 인수가 고정이 되어서 triple은 3을 곱해주는 형식으로 동작
'Programming > Python' 카테고리의 다른 글
[Fluent Python]객체 참조, 가변성, 재활용 (0) 2023.06.12 함수 데코레이터와 클로저 (0) 2023.06.12 [Fluent Python] 텍스트와 바이트 (0) 2023.06.12 [Fluent Python] 딕셔너리와 집합 (0) 2023.06.12 [Fluent Python] 내장 시퀀스 (0) 2023.06.12