반응형
파이썬에는 데코레이터라는 기능이 있습니다. 사전적으로는 '꾸며주는 사람'이라는 뜻이 있는데요. 이 기능은 함수의 기능을 확장하고 싶은 경우에 사용합니다. 구현상으로는 함수를 인자로 받아 함수의 기능을 추가한 후 다시 리턴해주는 형식으로 구현합니다. 이해하기 어려우실 테니 예제를 통해 살펴보도록 하겠습니다.
만약 특정 함수의 실행시간을 측정하고 싶다면 아래와 같이 코드를 작성할 수 있습니다.
import time
def func_time_interval(funct):
def time_check(*args, **kwargs):
start_time = time.perf_counter()
result = funct(*args, **kwargs)
finished_time = time.perf_counter()
print('실행 소요 시간:', finished_time - start_time)
return result
return time_check
def square(n):
return n*n
new_funct = func_time_interval(square)
new_funct(5)
실행 소요 시간: 2.0680004126916174e-06
위 코드는 func_time_interval의 인자로 받은 함수의 기능을 time_check함수에서 수행하는 기능인데,
추가적으로 시작시간과 종료시간을 계산하여 함수 실행 시간을 출력해주는 함수입니다.
데코레이터는 이렇게 함수의 기능을 추가하여 사용할 수 있습니다. 즉 n을 제곱하는 기능 이외에 함수 실행 시간을 측정하는 기능이 추가된 것이죠.
파이썬에서는 더 깔끔한 코드를 제공하기 위해 아래와 같이 사용할 수도 있습니다.
import time
def func_time_interval(funct):
def time_check(*args, **kwargs):
start_time = time.perf_counter()
result = funct(*args, **kwargs)
finished_time = time.perf_counter()
print('실행 소요 시간:', finished_time - start_time)
return result
return time_check
@ func_time_interval
def square(n):
return n*n
square(5)
실행 소요 시간: 1.1300435289740562e-06
즉 위처럼 @하고 꾸며주는 함수의 명을 넣으면 위의 복잡한 코드를 단순화할 수 있습니다.
반응형
'Python' 카테고리의 다른 글
[Python] 파이썬에서 if __name__ == "__main__" 의 의미 (0) | 2019.11.25 |
---|---|
[Python] 파이썬 라이브러리와 프레임워크의 차이 (0) | 2019.11.25 |
[Python] 파이썬 모듈의 종류와 사용법 (import) (0) | 2019.11.25 |
[Python] 파이썬 raise 구문 (0) | 2019.11.25 |
[Python] 파이썬 예외 구분하기 (except ... as ...) (0) | 2019.11.25 |