python 装饰器

引用连接:

https://blog.csdn.net/qq_31482599/article/details/103005139

装饰器

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

简单的装饰器

# 不带参数的装饰器
def pre_do_sth(func):
    def wrapper(*args, **kwargs):
        print("Do sth before call one")
        func(*args, **kwargs)
    return wrapper
  
@pre_do_sth
def echo(msg):
    print(msg)
    
echo("Hello World")

 

多层装饰器执行顺序

def verify1(func):
    print("装饰器 1 ...")
    def run():
        print("权限验证逻辑 1 ...")
        print('fun',func.__name__)
        func()
        print("111111111111111")
    return run
def verify2(func2):
    print("装饰器2 ...")
    def run2():
        print("权限验证逻辑 2 ...")
        print('fun2',func2.__name__)
        func2()
        print("22222222222222")
    return run2

##########
print('#########'*20+'\n')
@verify1
@verify2
def index1():
    print("index1....")
index1()

结果:

####################################################################################################################################################################################

装饰器2 ...
装饰器 1 ...
权限验证逻辑 1 ...
fun run2
权限验证逻辑 2 ...
fun2 index1
index1....
22222222222222
111111111111111

上方的装饰器和下面两个一样。可以更加清楚看到执行的顺序

#改造一
verify1(verify2(index1))()

#改造二
@verify2
def index1():
    print("index1....")

# 将@verify2 装饰的 index1() 用@verify再装饰
@verify1
def test22():
    return index1()
test22()

执行的是顺序一样。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值