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中使用Tkinter模块创建GUI程序实例
Jan 14 Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
Python版名片管理系统
Nov 30 Python
python3使用QQ邮箱发送邮件
May 20 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
pycharm快捷键汇总
Feb 14 Python
Django models filter筛选条件详解
Mar 16 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
Python中requests做接口测试的方法
May 30 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
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
详解json在php中的应用
2018/09/30 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
python 内置模块详解
2019/01/01 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
小学生元旦感言
2014/02/26 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
经验交流材料格式
2014/12/30 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL