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实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
基于Python实现扑克牌面试题
Dec 11 Python
python 用 xlwings 库 生成图表的操作方法
Dec 22 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
python实现吃苹果小游戏
Mar 21 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Python爬取网页信息的示例
Sep 24 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
Python数据正态性检验实现过程
2020/04/18 Python
什么是python的id函数
2020/06/11 Python
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
SQL Server笔试题
2012/01/10 面试题
如何提高SQL Server的安全性
2016/07/25 面试题
邮政员工辞职信
2014/01/16 职场文书
保护动物倡议书
2014/04/15 职场文书
活动总结怎么写
2014/04/28 职场文书
听课评语大全
2014/04/30 职场文书
质量月活动总结
2014/08/26 职场文书
先进个人申报材料
2014/12/30 职场文书
新入职员工工作总结
2015/10/15 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
Redis集群的关闭与重启操作
2021/07/07 Redis