1. 帶引數的裝飾器的應用示例
裝飾器傳入的引數都是函式,返回值也是函式
現在想給裝飾器傳入一般的引數
裝飾器也是函式,現在只需要再裝飾器外面再加一層即可
要求:編寫裝飾器required_types, 條件如下:
# 1
). 當裝飾器為@required_types
(int,float)確保函式接收到的
每乙個引數都是int或者float型別;
# 2
). 當裝飾器為@required_types
(list)確保函式接收到的每乙個引數都是list型別;
# 3
). 當裝飾器為@required_types
(str,int)確保函式接收到的每
乙個引數都是str或者int型別;
# 4
). 如果引數不滿足條件, 列印 typeerror:引數必須為***x型別
import functools
def required_types
(*kinds)
: #定義帶引數的裝飾器函式
def required
(fun)
: @functools.
wraps
(fun)
(*args,
**kwargs)
:for i in args:
if not isinstance
(i,kinds)
: #如果實參的型別不滿足形參的要求,列印型別錯誤
# print
('typeerror:引數必須為'
,kinds)
# raise typeerror
('引數必須為%s,%s'
%kinds) #丟擲異常(後面會學到)
可以看到,當傳遞的實參和題目要求的形參一致時,直接進行求和運算
將實參變為int型,而此時形參依然是float型,將異常丟擲,可以看到,會報型別錯誤
python 帶引數裝飾器
在前面一文 python裡為什麼需要使用裝飾器 decorator 裡,我們學習了為什麼需要裝飾器,知道裝飾器就是為了不修改原來函式的 又達到增加功能的作用。其實為了裝飾器更通用化,那麼裝飾器是否也可以帶引數呢?其實是可以的,這樣更加通用化了,達到共享極點。在前面也學習 為什麼要使用閉包 closu...
python 實現帶引數的裝飾器
coding utf8 author bluesli defbefore request,kwarg print before defafter request,kwarg print after deffilter before fun,after fun defouter main fun de...
python 之 帶引數的裝飾器
from functools import wraps deflogit logfile out.log deflogging decorator func wraps func def args,kwargs log string func.name was called print log st...