python装饰器-如何使用函数装饰器
Posted marton
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python装饰器-如何使用函数装饰器相关的知识,希望对你有一定的参考价值。
如何使用函数装饰器
问题举例
有时候我们想为多个函数统一添加某种功能,比如计时统计、记录日志,缓存运算结果等;
我们并不想在每个函数内一一添加完全相同的代码,有什么解决方案吗?
解决思路
定义装饰器函数,用它在原函数的基础上生成一个添加新功能的函数来代替原函数
代码
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实用编程技巧进阶
以上是关于python装饰器-如何使用函数装饰器的主要内容,如果未能解决你的问题,请参考以下文章