使用functools.cache做备忘
functools.cache装饰器实现了备忘。这是一项优化技术,能把耗时的函数得到的结果保存起来,避免传入相同参数时重复计算。
functools.cache是Python3.9新增的,下面通过斐波那契这种慢递归的函数适合使用@cache。
import functools
import time
def clock(func):
@functools.wraps(func)
def clocked(*args, **kwargs):
t0 = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - t0
name = func.__name__
arg_lst = [repr(arg) for arg in args]
arg_lst.extend(f'{k}={v!r}' for k, v in kwargs.items())
arg_str = ', '.join(arg_lst)
print(f'[{elapsed:0.8f}s] {name}({arg_str}) ->{result!r}')
return result
return clocked
@clock
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 2) + fibonacci(n - 1)
if __name__ == '__main__':
fibonacci(6)
运行结果如下所示&#x