一.多個裝飾器的的執行順序:
接下來我們以例子來檢視執行順序:
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)
二.多個裝飾練習:import functools
import inspect
def is_root(fun):
@functools.wraps(fun)
#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')
login_list = ['root','admin','redhat']
def is_login(fun):
@functools.wraps(fun)
if args[0] in login_list:
print('登陸成功')
res = fun(*args,**kwargs)
return res
else:
print('error:%s未登入' %args[0])
@is_login
@is_root
def add_student(name):
print('新增學生資訊...')
add_student('root')
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 ret...
python多個裝飾器的執行順序
defdecorator a func print get in decorator a definner a args,kwargs print get in inner a returnfunc args,kwargs returninner a defdecorator b func prin...
python多個裝飾器的執行順序
def decorator a func print get in decorator a def inner a args,kwargs print get in inner a return func args,kwargs return inner a def decorator b func...