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语言编写电脑时间自动同步小工具
Mar 08 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
python GUI实例学习
Nov 21 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python 实现有道翻译功能
Feb 26 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
解析php中如何调用用户自定义函数
2013/08/06 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP中list方法用法示例
2016/12/01 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PDO::_construct讲解
2019/01/27 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
seajs学习之模块的依赖加载及模块API的导出
2016/10/20 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
实习推荐信
2014/05/10 职场文书
写给领导的感谢信
2015/01/22 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL