python怎么为被装饰的函数保留元数据

  介绍

小编给大家分享一下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怎么为被装饰的函数保留元数据”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

python怎么为被装饰的函数保留元数据