[python] 파이썬에서 제공되는 functools 모듈의 기능에 대해 알려주세요.

파이썬은 functools 모듈을 통해 함수형 프로그래밍을 지원합니다. 이 모듈은 함수를 조작하고 변형하는 여러 유용한 도구와 함수를 제공합니다. 아래에서 functools 모듈의 주요 기능을 알아보겠습니다.

  1. functools.partial 메소드 functools.partial 메소드는 함수의 특정 인자를 고정하여 부분적으로 적용하는 기능을 제공합니다. 이를 통해 인자가 부족한 함수를 새로운 함수로 만들 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
from functools import partial

def multiply(x, y):
    return x * y

double = partial(multiply, y=2)
triple = partial(multiply, y=3)

print(double(4))  # 출력: 8
print(triple(4))  # 출력: 12
  1. functools.wraps 데코레이터 functools.wraps 데코레이터는 데코레이터로 감싼 함수를 감싼 함수의 속성을 유지하면서 동일한 동작을 하도록 도와줍니다. 이를 통해 데코레이터 함수가 원래 함수의 속성(문서화 문자열, 이름, 파라미터 정보 등)을 오버라이딩하지 않도록 합니다. 예를 들어,
from functools import wraps

def uppercase_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result.upper()
    return wrapper

@uppercase_decorator
def greeting(name):
    return f"Hello, {name}!"

print(greeting.__name__)  # 출력: greeting
  1. functools.lru_cache 데코레이터 functools.lru_cache 데코레이터는 Least Recently Used (LRU) 캐시 메커니즘을 사용하여 함수의 결과를 캐시하고, 이전에 호출된 인자에 대한 결과를 캐시에서 가져옵니다. 이를 통해 함수의 반복적인 계산을 효율적으로 처리할 수 있습니다. 예를 들어,
from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(5))  # 출력: 5

위에서 소개한 세 가지 함수외에도 functools 모듈에는 다양한 함수와 도구가 있어서 파이썬에서 함수형 프로그래밍을 더욱 효과적으로 할 수 있습니다. 부분 함수 적용, 함수 속성을 유지하는 데코레이터, LRU 캐싱 등을 활용하여 코드의 가독성과 성능을 개선할 수 있습니다.

더 자세한 정보는 파이썬 공식 문서를 참조하시면 도움이 될 것입니다: functools - Higher-order functions and operations on callable objects