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字符遍历的艺术
Sep 06 Python
让python的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
Python实现字典的key和values的交换
Aug 04 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
使用Python读取大文件的方法
Feb 11 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
Python通过字典映射函数实现switch
Nov 06 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
Python爬虫实战之爬取携程评论
Jun 02 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
webpack项目轻松混用css module的方法
2018/06/12 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
python实现Adapter模式实例代码
2018/02/09 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python SVD压缩图像的实现代码
2019/11/05 Python
django框架两个使用模板实例
2019/12/11 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python实现手势识别
2020/10/21 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
导游词范文
2015/02/13 职场文书
美丽心灵观后感
2015/06/01 职场文书
农村婚庆主持词
2015/06/29 职场文书
谢师宴家长致辞
2015/07/27 职场文书
中秋晚会致辞
2015/07/31 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
MySQL创建管理KEY分区
2022/04/13 MySQL
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL