Python?調(diào)用函數(shù)時檢查參數(shù)的類型是否合規(guī)的實(shí)現(xiàn)代碼
前言
閱讀本文大概需要3分鐘
說明
在python中,即使加入了類型注解
,使用注解之外的類型也是不報錯
的
def test(uid: int): print(uid) test("999")
- 但是我就想要
類型不對
就直接報錯 - 確實(shí)可以另辟蹊徑,
實(shí)現(xiàn)報錯
,似乎有強(qiáng)類型語言
那味了 - 只想淡淡的說一句
裝飾器
yyds
代碼實(shí)現(xiàn)
import inspect def type_check(func): def wrapper(*args, **kwargs): sig = inspect.signature(func) bound_args = sig.bind(*args, **kwargs) bound_args.apply_defaults() for name, value in bound_args.arguments.items(): param = sig.parameters[name] expected = param.annotation default_value = param.default if default_value != inspect.Parameter.empty: print('有默認(rèn)值 => {}實(shí)際值={}'.format(name, value)) else: print('無默認(rèn)值 => {}'.format(name)) # 有注解的參數(shù) if expected != inspect.Parameter.empty: # 無默認(rèn)值的參數(shù) if default_value == inspect.Parameter.empty: if not isinstance(value, expected): raise TypeError(f"參數(shù)'{name}'應(yīng)該是{expected}而不是{type(value)}") # 有默認(rèn)值的參數(shù)(值必須是注解類型或者等于默認(rèn)值) if value != default_value and not isinstance(value, expected): raise TypeError(f"參數(shù)'{name}'應(yīng)該是{expected}而不是{type(value)}") return func(*args, **kwargs) return wrapper
開始表演
@type_check def demo(n: int, msg: str, state: int = None): print('正常結(jié)束\n') # 正常調(diào)用 demo(1, 'SUCCESS') # 正常調(diào)用 demo(2, 'SUCCESS', 200) # 引發(fā)異常(第3個參數(shù)只能是int類型) demo(3, 'FAILED', '哈哈') # 引發(fā)異常(第1個參數(shù)只能是int類型) demo('4', "FAILED", '嘻嘻')
輸出結(jié)果
到此這篇關(guān)于Python 調(diào)用函數(shù)時檢查參數(shù)的類型是否合規(guī)的文章就介紹到這了,更多相關(guān)Python 檢查參數(shù)的類型是否合規(guī)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)的NN神經(jīng)網(wǎng)絡(luò)算法完整示例
這篇文章主要介紹了Python實(shí)現(xiàn)的NN神經(jīng)網(wǎng)絡(luò)算法,結(jié)合完整實(shí)例形式分析了Python使用numpy、matplotlib及sklearn模塊實(shí)現(xiàn)NN神經(jīng)網(wǎng)絡(luò)相關(guān)算法實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-06-06Python機(jī)器學(xué)習(xí)pytorch交叉熵?fù)p失函數(shù)的深刻理解
這篇文章主要為大家介紹了Python機(jī)器學(xué)習(xí)中對交叉熵?fù)p失函數(shù)的深刻理解,文中作出了詳細(xì)易懂的講解,有需要的朋友可以借鑒參考下希望能夠有所幫助2021-10-10python中從str中提取元素到list以及將list轉(zhuǎn)換為str的方法
今天小編就為大家分享一篇python中從str中提取元素到list以及將list轉(zhuǎn)換為str的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06python Django里CSRF 對應(yīng)策略詳解
這篇文章主要介紹了python Django里CSRF 對應(yīng)策略詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Python中encode和encoding的區(qū)別小結(jié)
Python是一種非常流行的高級編程語言,它提供了許多內(nèi)置函數(shù)和庫來方便地處理文本數(shù)據(jù),其中,encode和encoding是處理文本編碼的重要概念,本文就來介紹一下Python中encode和encoding的區(qū)別小結(jié),感興趣的可以了解一下2023-11-11Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)
這篇文章主要介紹了Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02深入了解python的tkinter實(shí)現(xiàn)簡單登錄
這篇文章主要為大家介紹了python的tkinter實(shí)現(xiàn)簡單登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12python實(shí)現(xiàn)串口自動觸發(fā)工作的示例
今天小編就為大家分享一篇python實(shí)現(xiàn)串口自動觸發(fā)工作的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07