python记忆化函数
时间: 2023-10-19 18:30:44 浏览: 43
Python中的记忆化函数是指将函数的计算结果缓存起来,以便在后续调用时直接返回缓存的结果,从而提高函数的执行效率。
下面是一个简单的例子,演示如何利用装饰器实现记忆化功能:
```python
import functools
def memoize(func):
cache = {}
@functools.wraps(func)
def wrapper(*args, **kwargs):
key = (args, tuple(sorted(kwargs.items())))
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]
return wrapper
@memoize
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # 输出:55
```
在上面的例子中,我们定义了一个`memoize`装饰器,它可以应用于任意函数。在函数被调用时,装饰器会检查缓存中是否已经有计算结果,如果有则直接返回缓存的结果,否则执行函数并将结果缓存起来。
在这个例子中,我们使用了记忆化技术来加速斐波那契数列的计算。由于斐波那契数列具有递归性质,在没有记忆化的情况下,计算复杂度会随着n的增大呈指数级增长。而通过记忆化函数,我们可以避免重复计算,大大提高了计算效率。
需要注意的是,记忆化函数的缓存是基于函数参数的,因此对于带有可变参数的函数,需要将参数转化为不可变类型,以便作为字典的键使用。在例子中,我们使用了元组和排序后的关键字参数字典作为键。