装饰器详解

 

1.装饰器案例 

def auth(func):
    def inner(*args,**kwargs):

        print("执行被装饰函数前要执行的函数")
        ret =func(*args,**kwargs)
        print("执行被装饰函数前要执行的函数")
        return ret

    return inner

@auth
def index(*args,**kwargs):
    print("hello")

index()
 
print(index)
print(index.__name__)

打印结果 (装饰后 函数名发生了变化):

执行被装饰函数前要执行的函数
hello
执行被装饰函数前要执行的函数
<function auth.<locals>.inner at 0x0000023B35134840>
inner

 

装饰器步骤

def auth(func):   # 第一步
    def inner(*args,**kwargs):  #第六步

        print("执行被装饰函数前要执行的函数")
        ret =func(*args,**kwargs)  #第七步
        print("执行被装饰函数前要执行的函数")
        return ret  #第九步

    return inner  #第三步 返回inner

@auth    # index =auth(index)   #第二步 auth(index)   第四步 index =inner
def index(*args,**kwargs):
    print("hello")    #第八步

index()  #第五步

print(index)
print(index.__name__)

 

给装饰器添加修复器

functiontools.wrapper()  ,装饰器会破坏原函数的完整性 ,原函数的内置属性会跟随装饰器的第二层嵌套的函数一致,通过functiontools会还原原函数的属性的完整性.

import  functools
def auth(func):   # 第一步

    @functools.wraps(func)
    def inner(*args,**kwargs):  #第六步

        print("执行被装饰函数前要执行的函数")
        ret =func(*args,**kwargs)  #第七步
        print("执行被装饰函数前要执行的函数")
        return ret  #第九步

    return inner  #第三步 返回inner

@auth    # index =auth(index)   #第二步 auth(index)   第四步 index =inner
def index(*args,**kwargs):
    print("hello")    #第八步

index()  #第五步

print(index)
print(index.__name__)

打印结果:

执行被装饰函数前要执行的函数
hello
执行被装饰函数前要执行的函数
<function index at 0x000002657A4A4840>
index

 

转载于:https://www.cnblogs.com/mengbin0546/p/10741553.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值