python 多個裝飾器疊加執行順序

2021-09-17 21:32:23 字數 1541 閱讀 9514

當乙個被裝飾的物件同時疊加多個裝飾器時

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...