装饰器修复技术

装饰器修复技术,让其更加完美,如果不加这个的话,函数内部会打印装饰器内的注释,加上之后,打印的是被装饰的函数.

装饰器

def login_auth(func):
    """我是装饰器"""
    def inner(*args, **kwargs):
        res = func(*args, **kwargs)
        return res

    return inner

@login_auth
def login():
    """我是被装饰的函数"""
    ...
print(login)
print(help(login))
###############################
<function login_auth.<locals>.inner at 0x000001DC6ABE60D0>
Help on function inner in module __main__:

inner(*args, **kwargs)
    我是装饰器

None

修饰装饰器

导入from functools import wraps

from functools import wraps
def login_auth(func):
    @wraps(func)

    def inner(*args, **kwargs):
        """我是装饰器"""
        res = func(*args, **kwargs)
        return res

    return inner

@login_auth
def login():
    """我是被装饰的函数"""
    ...
print(login)
print(help(login))
####################################
<function login at 0x000002ADDBEC60D0>
Help on function login in module __main__:

login()
    我是被装饰的函数

None

原文地址:https://www.cnblogs.com/SkyOceanchen/p/11768750.html

时间: 2024-11-11 03:41:43

装饰器修复技术的相关文章

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

Python 装饰器中的@wraps的作用:    装饰器的作用:    在不改变原有功能代码的基础上,添加额外的功能,如用户验证等    @wraps(view_func)的作用:     不改变使用装饰器原有函数的结构(如__name__, __doc__)    不使用wraps可能出现的ERROR:   view_func...endpoint...map... 如果没使用@wraps,当A调用了装饰器B的话,即使A.name,返回的会是装饰器B的函数名称,而不是A的函数名称如果使用了@

python中装饰器修复技术

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

装饰器修复:

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中我们用__closure__来检查函数是否是闭包 def func1(): name = '张三' def func2(): print(name) # 能够访问到外层作用域的变量 func2() print(func2.__closure__) # (<cell at 0x1036c7438

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

装饰器 以及 django 中的应用

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用. # 简单的 装饰器 from functools import wraps # 装饰器修复 def wrapper(func): @wraps(func) # 装饰器修复 def

python的闭包和装饰器

闭包 闭包的定义 1.闭:定义在函数内部的函数 2.包:内部函数引用了外部函数作用域的名字 函数的参数传达 1.直接传参 def index1(username): print(username) 2.闭包来实现函数内参数传达 def outter(x,y): # x = 1 # y = 40 def my_max(): if x > y: return x+y return y return my_max res1 = outter(1, 40) print(res1) res2 = outt

Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现)

Django---CSRF的装饰器,CSRF的流程,JSON数据格式,ajax技术(基于JQ实现) 一丶CSRF相关的装饰器 from django.utils.decorators import method_decorator # 给cbv加上装饰器 from django.views import View from django.views.decorators.csrf import csrf_exempt, csrf_protect ### 在FBV模式下 # csrf_exempt

python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变

Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用.写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring.废话不多说,上俩栗子就能搞明白! 实例一: 不加wraps # -*- coding=utf-8 -*- from functools imp