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.wraps的作用详解的更多相关文章
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变
Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的de ...
- 装饰器中functools的用处
定义一个最简单的装饰器 def user_login_data(f): def wrapper(*args, **kwargs): return f(*args, **kwargs) return w ...
- python 装饰器和 functools 模块
转自:http://blog.jkey.lu/2013/03/15/python-decorator-and-functools-module/ 什么是装饰器? 在 python 语言里第一次看到装饰 ...
- 正则表达式中模式修正符作用详解(i、g、m、s、x、e)
下面的转:http://www.cnblogs.com/shunyao8210/archive/2008/11/13/1332591.html 总结1:附件参数g的用法 表达式加上参数g之后,表明可以 ...
- python装饰器中的计时器thd.strat用法
thd = KThread(target=_new_func, args=(), kwargs=new_kwargs) thd.start() thd.join(seconds) alive = th ...
- 【转】单片机中volatile定义的作用详解
传送门:http://www.eeworld.com.cn/mcu/2011/0411/article_3928.html 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译 ...
- shell中各种括号的作用详解()、(())、[]、[[]]、{}
一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...
- springboot中的parent依赖作用详解
最近在阅读springboot+vue全栈开发实战,松哥编写的,虽然比较简单,各种技术没有深入讲解,但是还是可以看看的,特别是我这个前端菜鸟哈哈,以后可是要学习全栈的,把书中看到的不会的地方会记录下笔 ...
随机推荐
- OpenStack、KVM、VMWare和Docker
一.虚拟化 1.什么是虚拟化 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内 ...
- nmap与Nessus扫描特定靶机分析
打开装载Metasploitable2虚拟机的靶机,并获取靶机ip: 使用nmap+ip初步扫描靶机 PORT为端口,STATE为端口开放状态,SERVICE为端口的提供的服务.靶机的MAC地址为: ...
- 优盘版Kali
准备USB镜象 下载Kali linux. 如果你用的是Windows,下载Win32 Disk Imager. *nix类系统不需要额外的软件. 一块U盘(至少 2GB 容量). Kali Linu ...
- 商品详情页,banner滚动点击加载效果,js,jquary
<script language="javascript"> $(document).ready(function () { //purchase ...
- Hue的安装与部署
Hue的安装与部署 hadoop hue Hue 简介 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是 ...
- 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
文章翻译: 翻译 以下文章来源: 链接
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B题
2017-09-24 19:16:38 writer:pprp 题目链接:https://www.jisuanke.com/contest/877 题目如下: You are given a list ...
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Sum
2017-09-16 12:13:44 writer:pprp 特判 #include <iostream> using namespace std; int main() { int c ...
- sstream头文件-getline 函数 和 stringstream函数 和string的常见用法
2017-08-12 19:50:50 writer:pprp getline函数可以读入一行的字符,不论有没有空格 第一个参数,流 第二个参数 ,将流读入的地方 第三个参数,当读到某个字符的时候停止 ...
- 锁(3)-- DB锁
1 前言 数据库大并发操作要考虑死锁和锁的性能问题.看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一 ...