더북(TheBook)

마지막 단계로 파이썬은 함수 이름을 재대입하는 것을 자동화하기 위해 작지만 편리한 문법을 제공한다.

@데코레이터
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를 참조하는 부분이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.