定义装饰器函数,用它来生成一个在原函数基础上添加新功能的函数,代替原函数。
例如:用函数装饰器计算斐波那契数列:
初始写法:
def fibonacci1(n, catch=None):
if catch is None:
catch = {}
if n in catch:
return catch[n]
if n <= 1:
return 1
catch[n] = fibonacci1(n-1, catch) + fibonacci1(n-2, catch)
return catch[n]
# print(fibonacci1(50))
运用函数装饰器:
def memo(func):
catch = {} #闭包不会消失
def wrap(*args):
if args not in catch:
catch[args] = func(*args)
return catch[args]
return wrap
@memo
def fibonacci(n):
if n <= 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
# fibonacci = memo(fibonacci) #@memo等价于这句
# print(fibonacci(50))
本文介绍了一种使用装饰器优化斐波那契数列计算的方法。通过将重复计算的结果缓存起来,避免了递归过程中的重复计算,极大地提高了算法效率。
1030

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



