파이썬 데코레이터

스르륵·2021년 7월 20일
0

파이썬 데코레이터 만들기와 사용법에 대해 조금 정리해둔다.
데코레이터?
함수를 인자로 받는 함수다!

데코레이터

  • 원본 함수를 수정하지 않고 앞뒤로 새로운 로직을 추가한 새 함수를 만들 수 있다

함수도 객체이기 때문에 함수 객체의 주소를 다른 함수에 파라미터로 넘길 수 있는 것이다. 리턴 역시 함수로 나올 수 있는 것
ex)

import time


def make_time_checker(func):
      def new_func(*args, **kwargs):
            start_time = time.perf_counter()
            result = func(*args, **kwargs)
            end_time = time.perf_counter()
            print('실행시간:', end_time - start_time)
            return result
      return new_func

@make_time_checker
def big_number(n):
      return n ** n ** n

@make_time_checker
def big_number2(n):
      return (n+1) ** (n+1) ** (n+1)

실행시간을 체크하는 함수를 데코레이터 없이 쓰면 매 실행마다 똑같은 작업을 모든 함수의 처음과 끝에 넣어줘야 하지만 데코레이터를 쓰면 간편하게 만들 수 있다.


  1. 데코레이터 함수에서 기존 함수를 파라미터로 받고
  2. 데코레이터 함수 안에 새로운 함수를 정의한다. --> 새로운 기능을 기존 함수 변형 없이 만들 수 있음
  3. 새로만든 함수를 리턴하여 기능을 사용할 수 있다.
  4. @decorator를 통해 데코레이터를 사용할 수 있다.

위 이미지의 왼쪽방법도 데코레이터를 사용하는 다른 방법이다.

참고

https://wikidocs.net/23106
https://dojang.io/mod/page/view.php?id=2427
https://bluese05.tistory.com/30

profile
기록하는 블로그

0개의 댓글

Powered by GraphCDN, the GraphQL CDN