python学习笔记----多个装饰器

查看多个装饰器的调用顺序

def decorator_a(fun):
    print('Get in decorator_a')
 
    def inner_a(*args, **kwargs):
        print('Get in inner_a')
        res = fun(*args, **kwargs)
        return res
 
    return inner_a
 
 
def decorator_b(fun):
    print('Get in decorator_b')
 
    def inner_b(*args, **kwargs):
        print('Get in inner_b')
        res = fun(*args, **kwargs)
        return res
 
    return inner_b
 
 
@decorator_b
@decorator_a
def f(x):
    print('Get in f')
    return x * 2
 
print(f(2))

代码;

运行:

执行顺序是先从上到下读@decorator_b和 @decorator_a,然后在进一步执行@decorator_b @decorator_a装饰器内部函数,这时候的执行顺序是按照装饰器被调用的顺序,也就是先执行@decorator_b然后执行@decorator_a

让我们再看一个简单的例子:

查看运行结果:

执行顺序应该是这样的inner_a(inner_b(fun()))

首先执行最里面的函数fun( ),打印了---3----,然后执行外面一层函数b( ),打印----b----,返回b的值,因为第一个装饰器里面的函数a( )调用了内函数b( ),所以紧跟着执行a( ),之后没有内函数的调用,从上往下执行,先打印----1----,再打印----a----,执行顺序与执行结果顺序刚好相反

练习:

运行一下:

当登陆用户是‘root'时,可以添加学生信息,否则请求拒绝,如果登陆用户不存在,提示用户不存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值