PYTHON · 함수
데코레이터 심화 (파라미터)
인자를 받는 데코레이터는 3단 중첩 함수로 구현합니다. 실행 횟수 제한, 권한 검사 등에 활용됩니다.
함수고급decorator데코레이터wraps파라미터
핵심 설명
인자를 받는 데코레이터는 3단 중첩 함수로 구현합니다. 실행 횟수 제한, 권한 검사 등에 활용됩니다.
Python code
import functools
from typing import Callable, Any
def retry(max_attempts: int = 3, delay: float = 1.0):
"""재시도 데코레이터 (파라미터 포함)"""
def decorator(func: Callable) -> Callable:
@functools.wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> Any:
last_exc = None
for attempt in range(1, max_attempts + 1):
try:
return func(*args, **kwargs)
except Exception as e:
last_exc = e
print(f"시도 {attempt}/{max_attempts} 실패: {e}")
raise last_exc
return wrapper
return decorator
@retry(max_attempts=3, delay=0.5)
def unstable_api():
import random
if random.random() < 0.7:
raise ConnectionError("서버 응답 없음")
return "성공!"
try:
result = unstable_api()
print(result)
except ConnectionError as e:
print(f"최종 실패: {e}")학습 팁
@functools.wraps(func)를 반드시 사용하세요. 원본 함수의 이름, 독스트링 등 메타데이터를 보존합니다.
주의할 점
파라미터 있는 데코레이터에서 괄호를 빼먹으면 (@retry vs @retry()) 함수 자체가 첫 번째 인자로 전달됩니다.
자주 묻는 질문
데코레이터 심화 (파라미터)란 무엇인가요?
인자를 받는 데코레이터는 3단 중첩 함수로 구현합니다. 실행 횟수 제한, 권한 검사 등에 활용됩니다.
데코레이터 심화 (파라미터) 학습 시 주의할 점은 무엇인가요?
파라미터 있는 데코레이터에서 괄호를 빼먹으면 ( @retry vs @retry() ) 함수 자체가 첫 번째 인자로 전달됩니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.