python被修饰的函数消失问题解决(基于wraps函数)
作者:梁十安 发布时间:2021-07-22 17:32:34
标签:python,wraps,函数,修饰
这篇文章主要介绍了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
来源:https://www.cnblogs.com/liangxiyang/p/11685740.html


猜你喜欢
- os.remove不能用来删除文件夹,否则拒绝访问。# -*- coding:utf-8 -*-import osif __name__ =
- 一个封装好的链接Oracle数据库的工具类,可以方便的获取Connection对象关闭Statement、ResultSet、Statmen
- 现在已经是Python 3.8的最后一个alpha版本,接着就是本月底要发布的的3.8.0 beta 1了。按规定,3.8已经不会再添加(修
- 什么是接口测试接口测试主要用于检测外部系统与内部系统之间,以及系统内部各 个子系统之间的交互点。其测试的重点是,检查数据的交换、传递和控 制
- 一、前言设计应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使
- 1.数组的索引我用的是iloc函数。导入数据是data,索引data.iloc[i,j],i代表行,j代表列。如果要索引i行之后的所有行元素
- 如下表:先使用str_to_date函数,将其varchar类型转为日期类型,然后从小到大排序语法:select str_to_date(c
- 先准备好软件:一、安装Apache,配置成功一个普通网站服务器 运行下载好的“apache_2.0.55-win32-x86-no_ssl.
- 决策树之CART(分类回归树)详解,具体内容如下1、CART分类回归树简介 CART分类回归树是一种典型的二叉决策树,可以处理连续型变量
- 如何用拦截表单的方法上传图片? 看下列代码:<script language="
- 目录一、索引基础1. 索引的类型1.1 B-Tree 索引1.2 哈希索引1.3 空间数据索引(R-Tree)1.4 全文索引二、索引的优缺
- Go提供几种方法检查变量的类型,在字符串格式化标识%T, 反射方式:reflect.TypeOf, reflect.ValueOf.Kind
- 终于开始做用户部分了,先做注册一用户 1.1用户注册 首先在Models里添加用户注册模型类UserRegister 继
- TensorFlow用张量这种数据结构来表示所有的数据。用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩
- 本文主要介绍了vue中的数据绑定原理的实现,分享给大家,也给自己留个笔记,具体如下:vue中的响应式数据绑定是通过数据劫持和观察者模式来实现
- 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) &
- 本文实例讲述了vue动态组件和v-once指令。分享给大家供大家参考,具体如下:点击按钮时,自动切换两个组件<component :i
- 本文实例讲述了javascript设计模式 – 简单工厂模式。分享给大家供大家参考,具体如下:介绍:简单工厂模式是最常用的一类创建型设计模式
- 本文实例为大家分享了javascript实现tab切换特效代码,供大家参考,具体内容如下效果图:实现代码:<!DOCTYPE html
- 编写Python代码,大家都需要遵循PEP8,因此在pycharm中,如何设置每行最大长度限制,成为了一个小的知识盲点,在这里做一下记录,方