Python 데코레이터: 함수 래핑 및 수정
함수 동작을 동적으로 수정하는 Python 데코레이터를 알아보세요. 래퍼 함수, @ 구문, 데코레이터의 인수 처리를 이해합니다.
개요
데코레이터는 Python의 가장 우아하고 강력한 디자인 패턴 중 하나입니다. 이를 통해 개발자는 소스 코드를 영구적으로 변경하지 않고도 함수, 메서드 또는 클래스의 동작을 수정하거나 확장할 수 있습니다. 데코레이터는 전처리 및 후처리 단계를 실행하기 위해 다른 함수 안에 함수를 래핑하는 것으로 생각하면 됩니다. 이를 통해 데코레이터는 로깅, 타이밍, 유효성 검사 또는 액세스 제어와 같은 교차 문제를 구현하는 데 완벽합니다.
기본적으로 데코레이터는 Python 함수가 일급 시민이기 때문에 작동합니다. 즉, 함수를 다른 함수에 인수로 전달하고, 함수에서 반환하고, 변수에 할당할 수 있습니다. 데코레이터는 단순히 다른 함수를 인수로 취하고, 일부 추가 로직과 함께 원래 함수를 실행하는 중첩 래퍼 함수를 정의하고, 이 래퍼 함수를 반환하여 원본을 대체하는 함수입니다.
데코레이터를 간단하고 깔끔하게 적용하기 위해 Python은 대상 함수 정의 바로 위에 배치되는 `@ decorator_name` 구문 설탕을 제공합니다. 장식된 함수를 호출할 때 Python은 대신 래퍼를 호출합니다. 함수가 매개변수를 허용하는 경우 래퍼는 임의의 인수(`*args` 및 `**kwargs`)를 허용하고 올바르게 전달해야 합니다. 데코레이터를 이해하면 고도로 모듈화되고 깔끔한 DRY(Don't Repeat Yourself) 코드를 작성할 수 있습니다.
코드 및 실행 출력
함수 실행 세부 정보를 추적하고 기록하는 사용자 지정 데코레이터입니다.
def call_tracker(func):
"""Decorator that tracks and logs function execution details."""
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args: {args}")
result = func(*args, **kwargs)
print(f"{func.__name__} returned: {result}")
return result
return wrapper
@call_tracker
def multiply(a, b):
return a * b
# Calling the decorated function
result = multiply(5, 4)Calling multiply with args: (5, 4)
multiply returned: 20단계별 구현
- 성능 모니터에 런타임 메트릭 로깅
- 경로에 대한 인증 및 승인 확인 시행
- 값비싼 계산 결과를 캐싱하거나 메모하기
자주 묻는 질문
데코레이터는 인수를 어떻게 처리합니까?
중첩된 래퍼 함수에 *args 및 **kwargs를 사용하면 위치 또는 키워드 매개변수를 수신하여 래핑된 함수에 전달할 수 있습니다.
하나의 함수에 여러 데코레이터를 적용할 수 있나요?
예, 쌓을 수 있습니다. 위에서 아래로(가장 안쪽에서 가장 바깥쪽으로) 순서대로 실행됩니다.
관련 주제
권장 Python 리소스
관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.
Python에서 목록을 정렬하는 방법(오름차순 및 내림차순)
sort() 메서드와 sorted() 함수를 사용하여 Python에서 목록을 정렬하는 방법을 알아보세요. 사용자 정의 키 정렬 및 역순 예시를 살펴보세요.
Python 문자열 메서드 치트 시트
Python 문자열 조작에 대한 완전한 참조 가이드입니다. 문자열 속성의 서식 지정, 검색, 분할, 바꾸기 및 확인을 마스터합니다.
Python 대 JavaScript: 어떤 프로그래밍 언어가 가장 좋나요?
Python과 JavaScript를 포괄적으로 비교합니다. 구문 차이점, 성능, 사용 사례(백엔드와 프런트엔드) 및 코딩 예제를 살펴보세요.