마지막 단계로 파이썬은 함수 이름을 재대입하는 것을 자동화하기 위해 작지만 편리한 문법을 제공한다.
@데코레이터
def 함수(인수):
문장
이 문법은 다음과 같이 인식된다.
def 함수(인수): 문장 func = 데코레이터(함수)
두 경우 모두 데코레이터는 이미 정의된 함수로 가정한다. 데코레이터는 반드시 함수를 인수로 받아야 하며, 래핑된 버전의 함수를 반환해야 한다. 이 규칙을 제대로 지켰다고 가정해 보고, 다음 예시에서 @ 기호를 활용한 완전한 예시를 살펴보자.
@make_timer
def count_nums(n):
for i in range(n):
for j in range(1000):
pass
파이썬에서 이 정의문이 실행되고 나면 count_nums는 정의된 대로 실행되면서 (래퍼의 부분인) 실행 시간을 출력하는 부분도 함께 추가된다.
이 트릭의 마지막 부분(정말 마지막 트릭)은 이름 count_nums가 데코레이션 프로세스를 통해 새로운 코드가 추가된 count_nums를 참조하는 부분이다.