當乙個被裝飾的物件同時疊加多個裝飾器時
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_a
@decorator_b
def f(x):
print('get in f')
return x * 2
f(2)
看下執行結果:
get in decorator_b
get in decorator_a
get in inner_a
get in inner_b
get in f
import functools
import inspect
def is_admin(fun):
@functools.wraps(fun)
#inspect.getcallargs返回乙個字典,key值是形參,value值
#是對應的實參
inspect_res = inspect.getcallargs(fun,*args,*kwargs)
print('inspect的返回值: %s' %inspect_res)
if inspect_res.get('name') == 'root':
res = fun(*args,**kwargs)
return res
else:
print('not root user!')
login_session = ['root', 'redhat', 'westos']
def is_login(fun):
@functools.wraps(fun)
if args[0] in login_session:
res = fun(*args,**kwargs)
return res
else:
print('error:%s未登入' %args[0])
@is_login
@is_admin
def add_student(name):
print('新增學生資訊...')
add_student('linux')
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 r...
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...