前言
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
修饰器就是一个语法糖(在不添加新功能的情况下,是程序更友善)
比较复杂
Python修饰器与lru_cache实战:性能优化与方法缓存
本文介绍了Python中的修饰器原理,如property、classmethod、staticmethod,重点探讨了functools模块中的wraps、lru_cache和singledispatch。通过一个clock修饰器示例展示了如何记录函数执行时间。同时,详细解析了lru_cache修饰器,用于实现方法缓存,提高性能。文章以fibo函数为例,演示了lru_cache与clock修饰器的叠加使用,并解释了maxsize参数的作用。总结指出,修饰器是优化代码、增强可读性的有效工具。
166

被折叠的 条评论
为什么被折叠?



