前言
Python内置的用于装饰方法的函数:property、classmethod、staticmethod
本文可能涉及到的装饰器:functools.wraps functools.lru_cache functools.singledispatch
Yeah~
修饰器实例
def clock(func):
@functools.wraps(func)
def clocked(*args, **kwargs):
t0 = time.time()
result = func(*args, **kwargs)
elapsed = time() - t0
name = func.__name__
arg_lst = []
if args:
arg_lst.append(', '.join(repr(arg) for arg in args))
if kwargs:
pairs = ['%s=%r' % (k, w) for k, w in sorted(kwargs.items())]
arg_lst.append(', '.join(pairs))
arg_str = ', '.join(arg_lst)
print('[%0.8fs] %s(%s) -> %r ' % (elapsed, name, arg_str, result))
return result
return clocked
import functools
from clockdeco import clock
@functools.lru_cache()
@clock
def fibo(n):
if n < 2:
return n
return fibo(n-2) + fibo(n-1)
print( fibo(6) )
lru_cache()可以接受配置参数
叠放装饰器:@lru_cache()应用到@clock返回的函数上
lru_cache(maxsize=128, typed=False)
maxsize指定存储多少个调用的结果(最好为2的幂),typed如果为True把1和1.0区分开
小结
lru_cache
修饰器就是一个语法糖(在不添加新功能的情况下,是程序更友善)
比较复杂