如何使用函数装饰器 Python

#如何使用函数装饰器 
# 实际案例:为多个函数统一添加某种功能 比如计时统计,记录日志,缓存运算结果等 
# 题目1;斐波那契数列的第N项
#画一个缓存
def fibonacci(n,cache=None):
    if cache is None:
        cache={}
    if n in cache:
        return cache[n]
    if n<=1:
        return 1
    #return fibonacci(n-1)+fibonacci(n-2)
    cache[n] = fibonacci(n-1,cache)+fibonacci(n-2,cache)
    return cache[n]
#装饰器给多个函数添加缓存  包裹函数
def memo(func):
    cache={}
    def wrap(*args):
        if args not in cache:
            cache[args]=func(*args)
            return cache[args]
    return wrap

#使用memo装饰函数
@memo
def fibonacci(n):
    if n<=1:
        return 1
    return fibonacci(n-1)+fibonacci(n-2)
#使用memo装饰函数等价
#fibonacci=memo(fibonacci)
#题目2:一共有10个台阶的楼梯。从下面走到下面,一次只能迈1-3个台阶。
# 并且不能后退,走完这个楼梯共有多少种走法。
@memo
def climb(n,steps):
    cout=0
    if n==0:
        count=1
    elif n>0:
        for step in steps:
            cout +=climb(n-step,steps)
    return count
print (climb(10,(1,2,3)))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪snowflake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值