python被修饰的函数消失问题解决(基于wraps函数)


Posted in Python onNovember 04, 2019

这篇文章主要介绍了python被修饰的函数消失问题解决(基于wraps函数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

当使用@修饰符修饰函数时,会存在这样一个问题:被修饰的函数会消失(这是因为修饰函数没有设置返回值,如果设置了返回值,则就把返回值赋给被修饰函数,比如,test1函数的返回值设置为 return 6, 那么就把6赋值给test2,test2就不再是一个函数,而是一个int类型的变量,值就是6):

def test1(A):
  print("I am test1111111111")
@test1
def test2():
  print("I am test2222222222")
test2
print(type(test2))

输出如下:

I am test1111111111


<class 'NoneType'>

Nonetype和空值是不一致的,可以理解为Nonetype为不存在这个参数,空值表示参数存在,但是值为空

为了避免这个问题,可以使用wraps函数,它的作用是保证被修饰函数名不被改变

from functools import wraps

def test1(A):
  @wraps(A)
  def test3():
    print("I am test3333333")
  print("I am test1111111111")
  return test3


@test1
def test2():
  print("I am test2222222222")


test2
print(test2.__name__)
test2()

输出如下:

I am test1111111111
test2
I am test3333333

可以看到,test2函数的函数名没被改变,但函数功能却改变了,18行运行test2函数时,输出的是 I am test3333333

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 调用DLL操作抄表机
Jan 12 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
儿童python练习实例
May 27 Python
详解flask入门模板引擎
Jul 18 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
基于Python实现简单学生管理系统
Jul 24 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
如何通过python计算圆周率PI
Nov 11 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
Django一小时写出账号密码管理系统
Apr 29 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 Python
Python imread、newaxis用法详解
Nov 04 #Python
Python使用微信接入图灵机器人过程解析
Nov 04 #Python
python selenium循环登陆网站的实现
Nov 04 #Python
Django项目中使用JWT的实现代码
Nov 04 #Python
Python collections中的双向队列deque简单介绍详解
Nov 04 #Python
Python 下载及安装详细步骤
Nov 04 #Python
Django框架表单操作实例分析
Nov 04 #Python
You might like
火车头采集器3.0采集图文教程
2007/03/17 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
使用PHP编写发红包程序
2015/07/22 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
Js 中debug方式
2010/02/07 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
python实现telnet客户端的方法
2015/04/15 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
python2.7实现爬虫网页数据
2018/05/25 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
python同时遍历两个list用法说明
2020/05/02 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
致400米运动员广播稿
2014/02/07 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
python超详细实现完整学生成绩管理系统
2022/03/17 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL