python如何为被装饰的函数保留元数据
时间:2019-04-13
本文章向大家介绍python如何为被装饰的函数保留元数据,主要包括python如何为被装饰的函数保留元数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 后端逆袭,一份不可多得的PHP学习指南
- 走进Java接口测试之工具类库 Hutool
- Go开源游戏服务器框架——Pitaya
- 性能分析之pidstat新版本的%wait和mpstat的%iowait、top的wa
- 走进Java接口测试之整合ELK实现日志收集
- 【一天一大 lee】 监控二叉树 (难度:困难)-Day20200922
- 网络学习笔记2——物理层基础(信号与系统)(未完待续)
- 浅谈 React 中的 XSS 攻击
- Chrome 80+ 跨域Samesite 导致的cookie not found 解决方法
- 再不迁移到Material Design Components 就out啦
- hbase 学习
- 再谈Fragment
- java线程池(四):ForkJoinPool的使用及基本原理
- 算法书中算法
- Robo3T 与 NaviCat 的安装