Python学习——Python装饰器执行逻辑、执行顺序、调用流程原理分析

装饰器

介绍

 是Python的一个重要组成部分,可以有效的增强一个函数的功能。
 可以在不修改原函数的情况下对其进行功能扩展,遵循开放封闭原则

举个栗子

 要给好多个index函数添加验证,
 常规的做法如下,显然违反了封闭原则,并且实施起来也比较困难。

def verification():
    print("验证代码逻辑")
    
def index1():
    #验证
    verification()
    print("index1....")
    
def index2():
    #验证
    verification()
    print("index2....")
    
...
def indexn():
    #验证
    verification()
    print("indexn....")

装饰器初体验

def verify(func):
    def run():
        print("权限验证逻辑")
        func()
    return run

@verify
def index1():
    print("index1....")

@verify
def index2():
    print("index2....")

index1()
index2()
运行结果:
权限验证逻辑
index1....
权限验证逻辑
index2....

原理分析

以index2()为例
装饰 @verify 实际上等价于 index2 = verify(index2)
前面的index2 表示一个变量,用于指向后面函数的引用,可以用任意变量接收
后面的index2 表示def index2()这个函数引用
通过原函数名index2 接收的原因是为了不影响函数调用
即整个调用逻辑是:

index2 = verify(index2)
index2()   # 所以通过装饰器扩展原函数时,只需要添加装饰器函数即可,不需要更改调用

验证

 可以将index对应的装饰过程改造如下:

def verify(func):
    def run():
        print("权限验证逻辑")
        func()
    return run

def index2():
    print("index2....")

#调用逻辑如下
index2 = verify
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值