介绍
小编给大家分享一下python怎么为被装饰的函数保留元数据,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强>案例:强>
,,,,,,在函数对象中保存着一些函数的元数据,如:
,,,,,,,,,,,,,f.__name__ ,,,,,,,,,函数名
,,,,,,,,,,,,,f.__doc__ ,,,,,,,,,,,,函数文档
,,,,,,,,,,,,,f.__moudle__ ,,,,,函数所属模块名
,,,,,,,,,,,,,f.__dict__ ,,,,,,,,,,,,属性字典
,,,,,,,,,,,,,f.__defaults__ ,,,,,默认参数组
,,,,,,,,,,,,,……
,,,,,,在使用装饰器后,在装饰器里访问以上属性时,我们看到的是装饰器函数的元数据
,,,,,,<强>需求:强>
,,,,,,,,,,,,,实现在装饰器函数中,保留被装饰函数的元数据
<>强如何实现? 强>
,,,,,,通过functools中的包装,update_wrapper方法实现,每个都可单独实现
# !/usr/bin/python3 , import 时间 得到functools import (update_wrapper,包装,还以为,WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES) , , def count_time(函数): “才能”;“ 给才能目标函数加上计算运行时间统计 “才能”;“ #才能,这个装上器和update_wrapper一样,默认参数WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES @wraps才能(函数) def 才能包装器(* args,, * * kwargs): ,,,start_time =, time.time () ,,,, ,,,#,定义结果接收函数返回值,并且在装饰函数最后返回回去 ,,,resutl =, func (* args,, * * kwargs) ,,,print(& # 39;运行时间:& # 39;,,time.time () -start_time) ,,,return resutl ,, #才能,其中默认参数,WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES #,才能update_wrapper(包装,,函数) return 才能包装 , , @count_time def 添加(num=100): “才能”;“ 计才能算,0 ~ num 累加值,默认num=100 “才能”;“ time . sleep才能(1) return 才能总和([x for  x 拷贝范围(num + 1))) , if __name__ ==, & # 39; __main__ # 39;: 打印才能(& # 39;函数名:& # 39;,,add.__name__) 打印才能(& # 39;属性字典:& # 39;,,add.__dict__) 打印才能(& # 39;函数默认参数:& # 39;,,add.__defaults__) 打印才能(& # 39;函数所在模块:& # 39;,,add.__module__) 打印才能(& # 39;函数文档:& # 39;,,add.__doc__) ,, #,才能打印两个默认参数 打印才能(WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES) result =,才能添加() 印刷才能(结果)
看完了这篇文章,相信你对“python怎么为被装饰的函数保留元数据”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!