functools模块中的wraps装饰器

说明

使用functools模块提供的wraps装饰器可以避免被装饰的函数的特殊属性被更改,如函数名称__name__被更改。如果不使用该装饰器,则会导致函数名称被替换,从而导致端点(端点的默认值是函数名)出错。

例子

不使用wraps装饰器时:

def test(func):
def decorated_function(*args, **kwargs):
"""decorated_function里的注释"""
print('Hello')
return func(*args, **kwargs)
return decorated_function @decorator
def function():
"""function里的注释"""
print('World') function()
print(function.__name__)
print(function.__doc__)

输出结果:

Hello
World
decorated_function
decorated_function里的注释

使用wraps装饰器时:

from functools import wraps

def test(func):
@wraps(func)
def decorated_function(*args, **kwargs):
"""decorated_function里的注释"""
print('Hello')
return func(*args, **kwargs)
return decorated_function @decorator
def function():
"""function里的注释"""
print('World') function()
print(function.__name__)
print(function.__doc__)

输出结果:

Hello
World
function
function里的注释

wraps装饰器的使用的更多相关文章

  1. python学习笔记2-functools.wraps 装饰器

    wraps其实没有实际的大用处, 就是用来解决装饰器导致的原函数名指向的函数 的属性发生变化的问题: 装饰器装饰过函数func, 此时func不是指向真正的func,而是指向装饰器中的装饰过的函数 i ...

  2. python中functools.wraps装饰器的作用

    functools.wraps装饰器用于显示被包裹的函数的名称 import functools def node(func): #@functools.wraps(func) def wrapped ...

  3. 探究functools模块wraps装饰器的用途

    <A Byte of Python>17.8节讲decorator的时候,用到了functools模块中的一个装饰器:wraps.因为之前没有接触过这个装饰器,所以特地研究了一下. 何谓“ ...

  4. 关于functools模块的wraps装饰器用途

    测试环境:Python3.6.2 + win10 +  Pycharm2017.3 装饰器之functools模块的wraps的用途: 首先我们先写一个装饰器 # 探索functools模块wraps ...

  5. wraps装饰器的作用

    装饰器的本质是一个闭包函数,作用在于不改变原函数功能和调用方法的基础上给它添加额外的功能.装饰器在装饰一个函数时,原函数就成了一个新的函数,也就是说其属性会发生变化,所以为了不改变原函数的属性,我们会 ...

  6. python functools.wraps装饰器模块

    # -*-coding=utf-8 -*-#实现一个函数执行后计算执行时间的功能 __author__ = 'piay' import time, functools def foo(): ''' 定 ...

  7. python wraps装饰器

    这是一个很有用的装饰器.看过前一篇反射的朋友应该知道,函数是有几个特殊属性比如函数名,在被装饰后,上例中的函数名foo会变成包装函数的名字 wrapper,如果你希望使用反射,可能会导致意外的结果.这 ...

  8. python装饰器扩展之functools.wraps

    我们知道函数被装饰器,装饰后,所有的属性,以及内置函数就失效了. 原因是函数类型变成了warpper类型 示例1:不带wraps装饰器示例 def warfunc(func): def warpper ...

  9. 装饰器的修复wraps,偏函数partial 以及chain

    将被装饰的函数的一些属性值赋值给 装饰器函数,最终让属性的显示更符合我们的直觉. from functools import wraps def wapper(func): @wraps(func) ...

随机推荐

  1. mysql一些使用函数(不断更新)

    1.中文转拼音码,多用于将姓名转成拼音(例如:刘德华:liudehua) /*建立拼音码表*/ CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yi ...

  2. 实现多Realm时,可能会出现的问题

    问题背景 在实现多Realm时,扩展了ModularRealmAuthenticator 和 UsernamePasswordToken,于是在MyAuthenticationToken token ...

  3. robotframework执行UI自动化时不能运行谷歌浏览器的问题

    robotframework执行UI自动化时报错,查看日志显示Parent suite setup failed: Variable '${browser}' not found. Did you m ...

  4. 使用 k8s 搭建 confluence 6.10.x 版本

    将公司中已有的 confluence 服务迁移到 k8s 集群中,需要保留当前已有的数据.整体需要分为如下几个步骤: 备份 mysql 数据 备份 confluence 安装目录 备份 conflue ...

  5. Android Studio的第一次经历

    第一个简单APP的制作是从xml开始的,通过在java新建一个empty  activity,并在layout里找到对应的xml文件进行编写.每编写一个xml就要事先新建 一个对应的empty  ac ...

  6. [Luogu P1066] 2^k进制数 (组合数或DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P1066 Solution 这是一道神奇的题目,我们有两种方法来处理这个问题,一种是DP,一种是组合数. 这 ...

  7. 关于java中的类加载器

    什么是类加载器? 类加载器是专门负责加载类的命令或者说工具 ClassLoader java中的3个类加载器 JDK中自带了3个类加载器 启动类加载器 扩展类加载器 应用类加载器 假设有这样一段代码 ...

  8. R-C3D:用于时间活动检测的区域3D网络

    论文原称:R-C3D: Region Convolutional 3D Network for Temporal Activity Detection(2017) 主要贡献: 1.提出一个包括活动候选 ...

  9. leetcode129valid-parentheses

    题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[] ...

  10. 对ESP8266的例子进行编译时报错check_python_dependencies的问题的解决

    尝试对ESP8266的例子进行编译时报错: make: *** 没有规则可制作目标"check_python_dependencies" 解决方法: 1.安装python pip包 ...