91. Python中帶參數的裝飾器的應用示例

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型,將異常拋出,可以看到,會報類型錯誤
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章