python functools import wraps_python装饰器中functools.wraps的作用详解
# 定义一个最简单的装饰器
def user_login_data(f):
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
# 用装饰器装饰以下两个函数
@user_login_data
def num1():
print("aaa")
@user_login_data
def num2():
print("bbbb")
if __name__ == '__main__':
print(num1.__name__)
print(num2.__name__)
以上代码的输出结果为:
wrapper
wrapper
由此函数使用装饰器时,函数的函数名即 __name__已经被装饰器改变.
一般定义装饰器的话可以不用考虑这点,但是如果多个函数被两个装饰器装饰时就报错,因为两个函数名一样,第二个函数再去装饰的话就报错.
解决方案就是引入 functools.wraps ,以上代码的解决如下:
def user_login_data(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
增加@functools.wraps(f), 可以保持当前装饰器去装饰的函数的 __name__ 的值不变
以上输出结果就是:
num1
num2
python functools import wraps_python装饰器中functools.wraps的作用详解相关推荐
- python wraps_python装饰器中的@wraps
第一段代码:没有添加@wraps def user_login_confirm(name): print('我是', name) def deco_fun(view_func): print('准备变 ...
- python find的使用方法_Python中的rfind()方法使用详解
Python中的rfind()方法使用详解 rfind()方法返回所在子str 被找到的最后一个索引,或者-1,如果没有这样的索引不存在,可选择限制搜索字符串string[beg:end]. 语法 以 ...
- python创建列向量_关于Numpy中的行向量和列向量详解
关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...
- python编程字典100例_python中字典(Dictionary)用法实例详解
本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成. ...
- python编程midi键盘按键_Python中捕获键盘的方式详解
python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...
- 正则表达式中模式修正符作用详解(i、g、m、s、x、e)
正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或a ...
- python装饰器应用_Python装饰器实现方法及应用场景详解
应用场景: 1.授权(Authorization) 装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint).它们被大量使用于Flask和Django web框架中.这里是一个 ...
- 装饰器是什么?一文详解装饰器原理及 Python 计时器实战
在本文中,我将和大家一起了解装饰器的工作原理,如何将我们之前定义的定时器类 Timer 扩展为装饰器,以及如何简化计时功能.最后对 Python 定时器系列文章做个小结.喜欢记得收藏.关注.点赞. 文 ...
- python装饰器类型错误_Python各种类型装饰器?一起看看这份详解说明吧
装饰器说明Python中的装饰器是一种可以装饰其它对象的工具. 该工具本质上是一个可调用的对象(callable),所以装饰器一般可以由函数.类来实现. 装饰器本身需要接受一个被装饰的对象作为参数,该 ...
最新文章
- 代码覆盖测试工具Kcov简介及使用
- 详述一次大量删除导致MySQL慢查的过程
- pytorch构造可迭代的Dataset——IterableDataset(pytorch Data学习二)
- html音频自动播放隐藏控制器,HTML5 音频回放/播放控制器
- 文东工作室开通微信公众号了!欢迎订阅!~
- 山师计算机二级考试科目,山师计算机应用技术考试试题与答案.doc
- 室内布线电缆未来的发展趋势
- The system is running in low-graphics mode
- OCR文字识别技术总结(三)
- gridview中js的绑定问题 一个js的函数[转]
- HDU 2444 The Accomodation of Students (二分图最大匹配+二分图染色)
- 提高办公效率的方法-工具篇
- 数据库系统概论第五版_第二章:关系数据库
- 开源WebMail客户端Intouch2.2beta导致IE6崩溃的原因和修改方法
- 公交车查询系统软件测试,公交APP评测:谁是最好用的公交线路查询软件?
- c语言编译器怎么防止优化变量,volatile关键字的作用:防止变量被编译器优化
- 游戏编程该读哪些书?
- 抄送列表 ,处理邮件,年会抽奖
- 音乐歌单Android,LitePager(仿网易云音乐-歌单广场效果)
- 豆瓣top250图书爬取
热门文章
- html如何设置图片循环旋转动画效果,如何使用css3实现图片自动旋转的特效(完整代码)...
- 因果推断 - 反事实
- 洛谷 P2935 [USACO09JAN]最好的地方Best Spot
- BZOJ 1834 Luogu P2604 [ZJOI2010]网络扩容 (最小费用最大流)
- java servicefactory_Java DirectoryServiceFactory.getDirectoryService方法代碼示例
- java线程池深入讲解_死磕 java线程系列之线程池深入解析——生命周期
- 20211126 为什么转动惯量矩阵是正定的?
- Python3之多线程学习
- locate 和 find
- Linux 下源码编译安装 vim 8.1