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

本文通过具体示例解释了Python中多个装饰器的执行顺序。先从上至下读取装饰器定义,再由内向外执行被装饰的函数。通过观察运行结果,帮助理解装饰器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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'时,可以添加学生信息,否则请求拒绝,如果登陆用户不存在,提示用户不存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值