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


Posted in Python onMarch 21, 2018

本文实例为大家分享了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列表(list)常用操作方法小结
Feb 02 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
以一个投票程序的实例来讲解Python的Django框架使用
Feb 18 Python
Python实现命令行通讯录实例教程
Aug 18 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python绘制圆柱体的方法
Jul 02 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
浅谈flask源码之请求过程
Jul 26 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
pytorch forward两个参数实例
Jan 17 Python
ASP.NET Core中的配置详解
Feb 05 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 #Python
Python反转序列的方法实例分析
Mar 21 #Python
Python常见工厂函数用法示例
Mar 21 #Python
python如何统计序列中元素
Jul 31 #Python
python如何读写json数据
Mar 21 #Python
python如何读写csv数据
Mar 21 #Python
python如何让类支持比较运算
Mar 20 #Python
You might like
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
php设置编码格式的方法
2013/03/05 PHP
PHP CodeBase:将时间显示为"刚刚""n分钟/小时前"的方法详解
2013/06/06 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
vue组件与复用详解
2018/04/08 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
python+django快速实现文件上传
2016/10/24 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
什么是规则表达式
2012/05/03 面试题
市场营销专业毕业生自荐信
2013/11/02 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
司法助理专业自荐书
2014/06/13 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android