很多python代码中有一个默认装饰器,大概的样子为如下:

@wraps(func)

@functools.wraps(func)

然而去掉这个装饰器程序运行也不受影响,所以非常疑惑这个装饰器的作用,所以写了如下的测试代码:

# coding = utf-8from functools import wrapsdef decoretor(func):def wrapper(*args, **kwargs):'''my decoretor'''return func(*args, **kwargs)return wrapper@decoretor
def myfunc():'''my function'''print('my function')if __name__ == '__main__':print((myfunc.__doc__, myfunc.__name__))

这个代码的执行输出为:

('my decoretor', 'wrapper')

这说明myfunc()函数被装饰@decoretor装饰后,myfun()失去了本身的属性,编程了装饰器函数内部的属性,这样就改变了myfunc函数的本身的属性。再查看代码和调试的时候会产生歧义,所以我们需要消除这种歧义,所以使用@wrapper装饰器来做这个工作,看下面代码的输出:

# coding = utf-8from functools import wrapsdef decoretor(func):@wraps(func)def wrapper(*args, **kwargs):'''my decoretor'''return func(*args, **kwargs)return wrapper@decoretor
def myfunc():'''my function'''print('my function')if __name__ == '__main__':print((myfunc.__doc__, myfunc.__name__))

这个代码的执行结果为

('my function', 'myfunc')

所以加入代码@wraps(func)后,用decoretor再装饰myfunc代码后,还是原来myfunc的属性。

@wraps()装饰器的作用相关推荐

  1. python内置哪些装饰器_Python内置的wraps装饰器有什么用

    Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的de ...

  2. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  3. python装饰器作用-python中装饰器的作用

    装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化 例子: 这是一段代码,但功能太少,要对这 ...

  4. python装饰器作用-Python 装饰器的作用

    python装饰器的作用,我是这么理解的, 比如本来已经有几个写好的函数,这几个函数的返回值都是list,现在我想要它们都返回str型的值,一个个改函数太累,也容易出错,装饰器能解决这样的问题,它能对 ...

  5. python中装饰器的作用_Python中装饰器的用法

    装饰器的作用 当我们需要为函数拓展新的功能,但是又不能修改函数的内部结构时,就可以通过装饰器来完成.通过装饰器为函数拓展功能符合"对于扩展是开放的,对于修改是封闭的"这一开闭原则. ...

  6. python中装饰器的作用_如何理解Python装饰器

    展开全部 理解Python中的装饰器 @makebold @makeitalic def say(): return "Hello" 打印出如2113下的输出: Hello 你会怎 ...

  7. python带参数的装饰器的作用_Python带参数的装饰器运行原理解析

    关于装饰器的理解,特别像<盗梦空间>中的进入梦境和从梦境出来的过程,一层一层的深入梦境,然后又一层一层的返回,被带入梦境的是被装饰的函数,装饰器就是使人入梦的工具. 上代码: from f ...

  8. python functools import wraps_Python - 关于functools模块的wraps装饰器用途

    #有关wraps的源码,有兴趣的可以自行研究下 WRAPPER_ASSIGNMENTS= ('__module__', '__name__', '__qualname__', '__doc__','_ ...

  9. 深入理解python装饰器

    前言 你学习python的时候一定也遇到了装饰器,但是很多学习教程对装饰器的解释都是绕来绕去的,把初学者都给绕的云里雾里,我想读者你一定有类似的经历对吧?不过不要着急,只要你仔细用心的观看我这篇文章之 ...

最新文章

  1. 英特尔蚕食AMD和NVIDIA?
  2. 安全测试之XSS攻击
  3. USART_GetITStatus和USART_GetFlagStatus的区别
  4. 两个gcc_KDD 2020 | GCC:图上的Contrastive Coding
  5. 红橙Darren视频笔记 view的绘制流程(下)基于API27
  6. vue solt 属性浅析
  7. 在Java中应用函数式编程请小心!
  8. 最基础的Python的socket编程入门教程
  9. DevExpress v15.1:Reporting控件功能增强(二)
  10. Osql\sqlcmd工具管理 SQL Server
  11. document.body、document.documentElement和window获取视窗大小的差别
  12. vs2017激活密钥
  13. matlab在循环中保存jpg格式_matlab中的图片保存方法
  14. python图片标记_python提取那些被“标记”照片的实例详解
  15. 提高iOS开发效率的方法和工具
  16. 网易2019实习生招聘算法题(一)
  17. 基因-高通量测序-变异检测
  18. 发光二极管二极管引脚_LCD? 发光二极管? 等离子体? HDTV技术入门指南
  19. 机器学习如何驱动业务实践?你想知道的都在这!
  20. 全球与中国小龙虾市场深度研究分析报告

热门文章

  1. lg g pro 2android,详解LG G pro 2打开usb调试的方法
  2. 精选| 2022年1月R新包推荐(第62期)
  3. 想象力,是不是人类最强大,最流弊的能力?
  4. windows信息收集工具 -- winlog
  5. 定时器工作方式0初值除32_51单片机C语言程序100例分析(2)定时器+中断
  6. 没有规矩不成方圆,前端代码规范指南
  7. 庆典活动全面展开,网工系列全面预订
  8. SpringBoot 集成 Apollo 配置中心
  9. CCF-百度松果基金开放申请
  10. IE6使用技巧27则