python的一个装饰器例子

本文介绍了Python中装饰器的概念及应用,通过示例展示了如何使用装饰器进行函数增强,并利用标准库中的`functools.lru_cache`实现函数结果缓存,提高计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰器: 把被装饰的函数替换成新函数,二者接受相同的参数,而且(通常)返回被装饰的函数本该返回的值,
             同时还会做些额外操作。

同时可以实现: 装饰器模式(动态地给一个对象添加一些额外的职责)

一个简单的装饰器例子

def deco(func):
    def inner(*args):
		print("[INFO] running inner()")
		result = func(*args)
		return result
	return inner

@deco
def target():
	print("[INFO] running target()")

target()    #[INFO] running inner()
            #[INFO] running target()

标准库中的一个装饰器:  functools.lru_cache

     functools.lru_cache(maxsize=128, typed=False) 是非常实用的装饰器,它实现了备忘(memoization)功能
                这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算
     参数 : 

                 maxsize:  maxsize 参数指定存储多少个调用的结果,存满了之后,旧的结果会被扔掉,腾出空
                         间。为了得到最佳性能,maxsize 应该设为 2 的幂
                typed 参数如果设为 True,把不同参数类型得到的结果分开保存,即把通常认为相等的浮点数
                         和整数参数(如 1 和 1.0)区分开

 

simple: 

 

import functools

@functools.lru_cache()
@clock  #统计时间的装饰器
def fabonaqie(n):
    if(n < 2):
        return n
    return fabonaqie(n - 2) + fabonaqie(n - 1)

print(fabonaqie(5))
print(fabonaqie(5))     

#####################
[0.00000200s] fabonaqie(1) -> 1
[0.00000240s] fabonaqie(0) -> 0
[0.00002840s] fabonaqie(2) -> 1
[0.00010980s] fabonaqie(3) -> 2
[0.00000250s] fabonaqie(4) -> 3
[0.00014510s] fabonaqie(5) -> 5
5
5

可见两次计算斐波那契数列, 只执行了一次函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值