如何使用函数装饰器
问题举例
有时候我们想为多个函数统一添加某种功能,比如计时统计、记录日志,缓存运算结果等;
我们并不想在每个函数内一一添加完全相同的代码,有什么解决方案吗?
解决思路
定义装饰器函数,用它在原函数的基础上生成一个添加新功能的函数来代替原函数
代码
def memo(func): cache = {} def wrap(*args): res = cache.get(args) if not res: res = cache[args] = func(*args) return res return wrap # [题目1] 斐波那契数列(Fibonacci sequence): # F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2) # 1, 1, 2, 3, 5, 8, 13, 21, 34, ... # 求数列第n项的值? @memo def fibonacci(n): if n <= 1: return 1 return fibonacci(n-1) + fibonacci(n-2) # fibonacci = memo(fibonacci) print(fibonacci(50)) # [题目2] 走楼梯问题 # 有100阶楼梯, 一个人每次可以迈1~3阶. 一共有多少走法? @memo def climb(n, steps): count = 0 if n == 0: count = 1 elif n > 0: for step in steps: count += climb(n-step, steps) return count print(climb(100, (1,2,3)))
参考资料:python3实用编程技巧进阶
原文地址:https://www.cnblogs.com/marton/p/10921849.html
时间: 2024-10-12 21:31:29