Python-多个装饰器的执行顺序

一.多个装饰器的的执行顺序:

接下来我们以例子来查看执行顺序:

  • 程序内容:
def decorator_a(func):
    print('Get in decorator_a')
    def inner_a(*args,**kwargs):
        print('Get in inner_a')
        res = func(*args,**kwargs)
        return res
    return inner_a

def decorator_b(func):
    print('Get in decorator_b')
    def inner_b(*args,**kwargs):
        print('Get in inner_b')
        res = func(*args,**kwargs)
        return res
    return inner_b


@decorator_b
@decorator_a
def f(x):
    print('Get in f')
    return x * 2
f(1)
  • 测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
二.多个装饰练习:
  • 题目:
    编写装饰器1:用来判断是否登陆成功
    编写装饰器2:用来判断是否为root用户
    执行顺序为先判断是否登陆成功,在判断是否为root用户
  • 程序内容:
import functools
import inspect

def is_root(fun):
   @functools.wraps(fun)
   def wrapper(*args,**kwargs):
       #inspect.getcallargs返回值是字典,key值为:形参,value值为:形参对应实参
       inspect_res = inspect.getcallargs(fun,*args,**kwargs)
       print('inspect_res的返回值为:%s' %inspect_res)
       if inspect_res.get('name') == 'root':
           res = fun(*args,**kwargs)
           return res
       else:
           print('not root user')
   return wrapper

login_list = ['root','admin','redhat']

def is_login(fun):
   @functools.wraps(fun)
   def wrapper(*args,**kwargs):
       if args[0] in login_list:
           print('登陆成功')
           res = fun(*args,**kwargs)
           return res
       else:
           print('Error:%s未登录' %args[0])
   return wrapper

@is_login
@is_root
def add_student(name):
   print('添加学生信息...')

add_student('root')
  • 测试:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值