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

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

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