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 调用DLL操作抄表机
Jan 12 Python
python将字符串转换成数组的方法
Apr 29 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python正则表达式完全指南
May 25 Python
Python构建XML树结构的方法示例
Jun 30 Python
python unittest实现api自动化测试
Apr 04 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
python文件选择对话框的操作方法
Jun 27 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
详解python3类型注释annotations实用案例
Jan 20 Python
Python基础之常用库常用方法整理
Apr 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
thinkphp实现图片上传功能分享
2014/03/04 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
nginx下安装php7+php5
2016/07/31 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
JavaScript版代码高亮
2006/06/26 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jquery延迟对象解析
2016/10/26 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Vue官网todoMVC示例代码
2018/01/29 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Flask之请求钩子的实现
2018/12/23 Python
python super函数使用方法详解
2020/02/14 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
商务邀请函范文
2014/01/14 职场文书
商场总经理岗位职责
2014/02/03 职场文书
小学亲子活动总结
2014/07/01 职场文书
思想作风建设心得体会
2014/10/22 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫