按顺序
如@1
@2
先执行 @2的外层
@1的外层
@1的内层 (必须要有给2号内部函数的返回值)
@2的内层
练习
装饰器:
1.用户登陆,root,admin,redhat
2.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:
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')