문제의 역사
고차 함수의 개념은 함수형 프로그래밍에서 유래하며, Python이 처음부터 지원하고 있습니다. 이를 통해 보다 추상적이고 유연하며 간결한 코드를 작성할 수 있습니다.
문제
많은 사람들이 함수가 일급 객체로서의 가능성을 과소평가합니다. 함수의 잘못된 전달/반환, 잘못된 호출 또는 코드 가독성 손실로 인해 오류가 발생할 수 있습니다.
해결책
Python에서 함수는 완전한 객체입니다. 함수를 인수로 전달하고, 다른 함수에서 반환하며, 컬렉션에 저장할 수 있습니다. 이를 고차 함수라고 부릅니다. 이는 범용 래퍼, 콜백, 데코레이터 및 기타 여러 패턴을 구현할 수 있도록 합니다.
코드 예시:
def apply_function(func, value): return func(value) def square(x): return x * x result = apply_function(square, 5) # 25를 반환합니다.
주요 특징:
고차 함수는 함수뿐만 아니라 데이터를 반환할 수 있습니까?
네, 고차 함수는 함수를 인수로 받고/또는 함수를 반환하는 모든 함수입니다. 반환 값에 대한 제한은 없습니다.
내장 함수 map은 생성기 객체를 반환합니까, 아니면 리스트를 반환합니까? (Python 3+)
Python 3에서는 map이 리스트가 아닌 반복 가능한 생성기 객체를 반환합니다. 리스트를 얻으려면 list(map(...))로 명시적으로 감싸야 합니다.
squared = map(lambda x: x**2, [1,2,3]) result = list(squared) # 이제 [1, 4, 9]를 얻습니다.
함수를 변수에 할당하고 컬렉션에 저장할 수 있습니까?
네, 함수는 변수에 할당할 수 있으며, 리스트, 딕셔너리에도 저장될 수 있고 인수로 전달될 수 있습니다. 이는 Python의 일반적인 객체입니다.
def greet(): print('Hello') a = greet a() # greet 호출
고차 함수를 사용하지 않고 여러 함수에 대한 로깅을 구현하려고 하여 코드 중복과 각 처리기에서의 오류가 발생했습니다.
장점:
단점:
범용 데코레이터-로거를 도입하여 모든 함수가 일관되게 로깅되도록 했으며, 코드가 더 깔끔해졌습니다.
장점:
단점: