python3 装饰器修复技术@wraps到底是什么?

Python 装饰器中的@wraps的作用:
    装饰器的作用:    在不改变原有功能代码的基础上,添加额外的功能,如用户验证等
    @wraps(view_func)的作用:     不改变使用装饰器原有函数的结构(如__name__, __doc__)
    不使用wraps可能出现的ERROR:   view_func...endpoint...map...

如果没使用@wraps,当A调用了装饰器B的话,即使A.name,返回的会是装饰器B的函数名称,而不是A的函数名称
如果使用了@wraps,当A调用了装饰器B的话,A.__name__返回的会是A函数的名称,而不是饰器B的名称,这也即使常说的@wraps是装饰器的修复技术,实际就是修复还原了A的__name__变量,同理__doc__变量也是一样。
具体例子如下:

1.普通函数

2.添加装饰器,但不添加@warps修复

 

 3.添加装饰器修复技术@wraps

原文地址:https://www.cnblogs.com/goddog1024/p/11195040.html

时间: 2024-11-10 20:11:55

python3 装饰器修复技术@wraps到底是什么?的相关文章

装饰器修复技术

装饰器修复技术,让其更加完美,如果不加这个的话,函数内部会打印装饰器内的注释,加上之后,打印的是被装饰的函数. 装饰器 def login_auth(func): """我是装饰器""" def inner(*args, **kwargs): res = func(*args, **kwargs) return res return inner @login_auth def login(): """我是被装饰的函数

python中装饰器修复技术

python装饰器@wraps作用-修复被装饰后的函数名等属性的改变 Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变), 为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用.写一个decorator的时候,最好在实现之前加上functools的wrap, 它能保留原有函数的名称和docstring. 未加@wraps的时候: from functools impor

python3 装饰器

看廖雪峰官网的python3装饰器有感 装饰器即将一个函数作为变量在新的函数中调用此函数. 作业: 能否写出一个@log的decorator,使它既支持: @logdef f():     pass 又支持: @log('execute')def f():     pass      例1: import functools import time def log(*args,**kwargs):     # *args 是个元组     if args and isinstance(args,

python装饰器中的@wraps

python装饰器中的@wraps 第一段代码:没有添加@wraps def user_login_confirm(name): print('我是', name) def deco_fun(view_func): print('准备变身...') def wrapper(): view_func() print('变身完成...') return wrapper return deco_fun @user_login_confirm('小辣椒') def tony(): print('我是',

Python3——装饰器及应用(这个属于详细的)

转自:https://blog.csdn.net/loveliuzz/article/details/77853346    说明:本文代码是原作者编写,有一些不适应我的环境的代码我进行了删除修改等操作,特此说明! 解释的很全面! 1.装饰器: (1)本质:装饰器的本质是函数,其基本语法都是用关键字def去定义的. (2)功能:装饰其他函数,即:为其他函数添加附加功能. (3)原则:不能修改被装饰的函数的源代码,不能修改被装饰的函数的调用方式.即:装饰器对待被修饰的函数是完全透明的. (4)简单

Python3装饰器

装饰器:本质是函数(装饰其他函数-->为其他函数添加功能) 原则:1.不能被修改装饰的源代码 2.不能修改被装饰的函数的调用方式知识储备:1.函数即"变量"2.高阶函数3.嵌套函数高阶函数+嵌套函数 = 装饰器 高阶函数:a.把一个函数名当做实参传给另一个函数 b.返回值中包含函数名嵌套函数: 仅用高阶函数实现的装饰器 高阶函数+嵌套函数:实现装饰器. 装饰器函数定义时,通过将需要装饰的函数(装饰器的形参)放在嵌套函数里面,嵌套在内层的函数只进行函数定义,不进行函数的调用(内含的

python3装饰器的简单解释

#闭包,也叫词法闭包:如下所示函数A主要是为了函数B提供运行环境的#闭包只是在表现和形式上像函数,其实闭包并不是函数#由函数在嵌套环境中,内层函数里,对外层函数作用域的变量进行了引用,那么在外层函数返回后,内层函数依然可是使用外层函数的变量,这样的变量就构成了可以使用时的环境#所以闭包对于隐藏状态,以及在函数和作用域中进行切换,一个函数可以发挥很多种功能# #闭包:如下所示我们只需要不断的变化f调用变化就可以是函数B跟着变化了 def A(num1,num2):     def B(x,y):

装饰器修复:

from functools import wrapsdef wrapper(func): @wraps(func) def inner(request,*args,**kwargs): """ inner的注释: :param request: :param args: :param kwargs: :return: """ print("before") ret = func(request,*args,**kwargs)

python装饰器的wraps作用

不加: from functools import wraps def my_decorator(func): def wper(*args, **kwargs): '''decorator''' print('Calling decorated function...') return func(*args, **kwargs) return wper @my_decorator def example(): """Docstring""" p