92 Python中多個裝飾器的應用示例

2021-10-01 02:10:07 字數 2623 閱讀 7738

lesson 92 python中多個裝飾器的應用示例

1. 示例1:多個裝飾器呼叫順序

通過下面這個例子來研究多個裝飾器的呼叫順序

可以看到,先呼叫哪個裝飾器,哪個裝飾器就先執行

2. 多個裝飾器的應用示例:判斷使用者是不是root使用者,root使用者可以新增和刪除

判斷是否為管理員root登陸,如果為root登陸,則顯示相應的資訊

inspect.getcallargs返回乙個字典, key值:形參 value值:對應的實參

import functools

import inspect

def is_admin

(fun)

: #定義裝飾器1,其功能是判斷使用者是不是管理員root使用者登陸,只有超級使用者才可以進新使用者管理

@functools.

wraps

(fun)

(*args,

**kwargs)

: #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

('permission denied!'

)login_user =

['root'

,'admin'

,'redhat'

]def is_login

(fun)

: #定義裝飾器2,判斷登陸的使用者是否是系統存在的可以登陸系統的使用者

@functools.

wraps

(fun)

(*args,

**kwargs)

:if args[0]

in login_user:

res =

fun(

*args,

**kwargs)

return res

else

:print

('error: %s未登入'

%args[0]

)@is_login #先呼叫裝飾器2

@is_admin #再呼叫裝飾器1

def add_student

(name)

:print

('新增學生%s...'

可以看到inspect返回乙個字典,root使用者可以成功登陸系統

如果是系統存在的可以登陸系統的使用者而不是超級使用者,則顯示permission denied

如果是系統中不存在的使用者,則無法登入系統

python中多個裝飾器的執行順序

1.執行順序 當乙個程式裡面有多個裝飾器的時候如何執行的呢,借助乙個程式來理解一下 def decorator a func print get in decorator a def inner a args,kwargs print get in inner a res func args,kwa...

python 中多個裝飾器的執行順序

python 中多個裝飾器的執行順序 def inner1 args,kwargs print in inner1 ret f1 args,kwargs print 111 return ret return inner1 def inner2 args,kwargs print in inner2...

python合併多個裝飾器

import functools defmulti decorators args 合併多個裝飾器 越靠前的裝飾器就越靠近被裝飾的函式,執行的順序就越靠後 def inner func wrap functools.wraps func for decorator in args func deco...