您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python如何为被装饰的函数保留元数据

5b51 2022/1/14 8:19:58 python 字数 6100 阅读 422 来源 www.jb51.cc/python

本文实例为大家分享了python为被装饰的函数保留元数据的具体代码,供大家参考,具体内容如下

概述

本文实例为大家分享了python为被装饰的函数保留元数据的具体代码,供大家参考,具体内容如下

案例:

       在函数对象中保存着一些函数的元数据,如:

              f.__name__           函数

              f.__doc__              函数文档

              f.__moudle__       函数所属模块名

              f.__dict__              属性字典

              f.__defaults__       认参数组

              ……

       在使用装饰器后,在装饰器里访问以上属性时,我们看到的是装饰器函数的元数据

       需求:

              实现在装饰器函数中,保留 被装饰函数 的元数据

如何实现?

       通过 functools中的wraps,update_wrapper方法实现,每个都可单独实现

#!/usr/bin/python3
 
import time
from functools import (wraps,update_wrapper,WRAPPER_ASSIGNMENTS,WRAPPER_UPDATES)
 
 
def count_time(func):
  """
  给目标函数加上计算运行时间统计
  """
  # 这个装上器和update_wrapper一样,认参数WRAPPER_ASSIGNMENTS,WRAPPER_UPDATES
  @wraps(func)
  def wrapper(*args,**kwargs):
    start_time = time.time()
     
    # 定义result接收函数返回值,并且在装饰函数最后返回回去
    resutl = func(*args,**kwargs)
    print('运行时间:',time.time()-start_time)
    return resutl
   
  # 其中认参数 WRAPPER_ASSIGNMENTS,WRAPPER_UPDATES
  # update_wrapper(wrapper,func)
  return wrapper
 
 
@count_time
def add(num=100):
  """
  计算 0~num 累加值,认num=100
  """
  time.sleep(1)
  return sum([x for x in range(num+1)])
 
if __name__ == '__main__':
  print('函数名:',add.__name__)
  print('属性字典:',add.__dict__)
  print('函数认参数:',add.__defaults__)
  print('函数所在模块:',add.__module__)
  print('函数文档:',add.__doc__)
   
  # 打印两个认参数
  print(WRAPPER_ASSIGNMENTS,WRAPPER_UPDATES)
  result = add()
  print(result)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是编程之家为你收集整理的python如何为被装饰的函数保留元数据全部内容,希望文章能够帮你解决python如何为被装饰的函数保留元数据所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶