파이썬에서 데커레이터하기 위한 것은 property(), classmethod(), statoc,etjpd)를 제공한다.
이 중 자주 보는 것은 functools.warps()로, 제대로 작동하는 데커레이터를 만들기 위한 헬퍼이다.
functools.lru_cache()는 실제로 쓸모가 많은 데커레이터로, 메모이제이션을 구현하고, 이전에 실행한 값비싼 함수의 결과를 저장함으로써 이전에 사용된 인수에 대해 다시 꼐산할 필요가 없게 해준다.
#fibo_demo.py: 피보나치 수열에서 n번째 숫자를 아주 값비싸게 계산하는 방식
from clockdeco import clock
@clock
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-2) + fibonacci(n-1)
if __name__ =='__main__':
print(fibonacci(6))
#캐시로 이용한 빠른 구현
import functools:
from clockdeco import clock
@functools.lru_cache()
@clock
def fibonacci(n):
if n <2:
return n
return fibonacci(n-2) + fibonacci(n-1)
if __name__ == '__main__':
print(fibonacci(6))
#시그니처
functools.lru_cache)maxsize=128, typed=False)