Lesson91 Python中帶參數的裝飾器的應用示例
文章目錄
1. 帶參數的裝飾器的應用示例
裝飾器傳入的參數都是函數,返回值也是函數
現在想給裝飾器傳入一般的參數
裝飾器也是函數,現在只需要再裝飾器外面再加一層即可
要求:編寫裝飾器required_types, 條件如下:
# 1). 當裝飾器爲@required_types(int,float)確保函數接收到的
每一個參數都是int或者float類型;
# 2). 當裝飾器爲@required_types(list)確保函數接收到的每一個參數都是list類型;
# 3). 當裝飾器爲@required_types(str,int)確保函數接收到的每
一個參數都是str或者int類型;
# 4). 如果參數不滿足條件, 打印 TypeError:參數必須爲xxxx類型
import functools
def required_types(*kinds): #定義帶參數的裝飾器函數
def required(fun):
@functools.wraps(fun)
def wrapper(*args,**kwargs):
for i in args:
if not isinstance(i,kinds): #如果實參的類型不滿足形參的要求,打印類型錯誤
# print('TypeError:參數必須爲',kinds)
# raise TypeError('參數必須爲%s,%s' %kinds) #拋出異常(後面會學到)
else:
res = fun(*args,**kwargs)
return res
return wrapper
return required
@required_types(float,float)
def add(a,b):
return a+b
print(add(1.0,2.1))
可以看到,當傳遞的實參和題目要求的形參一致時,直接進行求和運算
將實參變爲int型,而此時形參依然是float型,將異常拋出,可以看到,會報類型錯誤