python中有趣的装饰器
2021/10/7 20:43:10
本文主要是介绍python中有趣的装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在函数上添加一个装饰器,增加额外的操作处理(比如日志、计时等)。
特别是在代码调试阶段特别好用。
import time from functools import wraps def funcruntime(func): @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end-start) return result return wrapper
简单的时间装饰器。
注:这里特别要注意的是需要导入functools里@wraps 装饰器来注解底层包装函数。非常重要,不然原来的函数里的元信息比如名字、文档字符串、注解和参数签名都丢失了。其实任何装饰器操作需要保留元数据都应该使用这个@wraps 装饰器,甚至我觉得这个就应该无脑用。
@funcruntime def testtime(t: int): """ 测试装饰器效果 :param t: int :return: None """ time.sleep(t) return testtime(1)
执行效果如下:
这样一个简单的测试方法的装饰器就完成了。
装饰器其实就是把func直接当做参数传入做了一个闭包处理。
def testtime(t: int): """ 测试装饰器效果 :param t: int :return: None """ time.sleep(t) return testtime = funcruntime(testtime) testtime(1)
这段代码和上面是完全等价的。
注:内置的装饰器 @staticmethod,@classmethod,@property
原理也是一样的。
这篇关于python中有趣的装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南