Python 多個裝飾器的執行順序

2021-09-10 12:13:53 字數 1416 閱讀 8055

一.多個裝飾器的的執行順序:

接下來我們以例子來檢視執行順序:

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