亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python?調(diào)用函數(shù)時(shí)檢查參數(shù)的類型是否合規(guī)的實(shí)現(xiàn)代碼

 更新時(shí)間:2024年06月21日 12:10:59   作者:是大嘟嘟呀  
這篇文章主要介紹了Python?調(diào)用函數(shù)時(shí)檢查參數(shù)的類型是否合規(guī)的實(shí)現(xiàn)代碼,本文給大家講解的非常詳細(xì),需要的朋友可以參考下

前言 

閱讀本文大概需要3分鐘

說(shuō)明

在python中,即使加入了類型注解,使用注解之外的類型也是不報(bào)錯(cuò)

def test(uid: int):
	print(uid)
test("999")
  • 但是我就想要類型不對(duì)就直接報(bào)錯(cuò)
  • 確實(shí)可以另辟蹊徑,實(shí)現(xiàn)報(bào)錯(cuò),似乎有強(qiáng)類型語(yǔ)言那味了
  • 只想淡淡的說(shuō)一句裝飾器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('無(wú)默認(rèn)值 => {}'.format(name))
            # 有注解的參數(shù)
            if expected != inspect.Parameter.empty:
                # 無(wú)默認(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

開(kāi)始表演

@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個(gè)參數(shù)只能是int類型)
demo(3, 'FAILED', '哈哈')  
# 引發(fā)異常(第1個(gè)參數(shù)只能是int類型)
demo('4', "FAILED", '嘻嘻')  

輸出結(jié)果

到此這篇關(guān)于Python 調(diào)用函數(shù)時(shí)檢查參數(shù)的類型是否合規(guī)的文章就介紹到這了,更多相關(guān)Python 檢查參數(shù)的類型是否合規(guī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(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ò)算法完整示例

    這篇文章主要介紹了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-06
  • Python機(jī)器學(xué)習(xí)pytorch交叉熵?fù)p失函數(shù)的深刻理解

    Python機(jī)器學(xué)習(xí)pytorch交叉熵?fù)p失函數(shù)的深刻理解

    這篇文章主要為大家介紹了Python機(jī)器學(xué)習(xí)中對(duì)交叉熵?fù)p失函數(shù)的深刻理解,文中作出了詳細(xì)易懂的講解,有需要的朋友可以借鑒參考下希望能夠有所幫助
    2021-10-10
  • python中從str中提取元素到list以及將list轉(zhuǎn)換為str的方法

    python中從str中提取元素到list以及將list轉(zhuǎn)換為str的方法

    今天小編就為大家分享一篇python中從str中提取元素到list以及將list轉(zhuǎn)換為str的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python Django里CSRF 對(duì)應(yīng)策略詳解

    python Django里CSRF 對(duì)應(yīng)策略詳解

    這篇文章主要介紹了python Django里CSRF 對(duì)應(yīng)策略詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python中encode和encoding的區(qū)別小結(jié)

    Python中encode和encoding的區(qū)別小結(jié)

    Python是一種非常流行的高級(jí)編程語(yǔ)言,它提供了許多內(nèi)置函數(shù)和庫(kù)來(lái)方便地處理文本數(shù)據(jù),其中,encode和encoding是處理文本編碼的重要概念,本文就來(lái)介紹一下Python中encode和encoding的區(qū)別小結(jié),感興趣的可以了解一下
    2023-11-11
  • Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)

    Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)

    這篇文章主要介紹了Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 深入了解python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄

    深入了解python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄

    這篇文章主要為大家介紹了python的tkinter實(shí)現(xiàn)簡(jiǎn)單登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • jetson上安裝pycharm的詳細(xì)過(guò)程

    jetson上安裝pycharm的詳細(xì)過(guò)程

    Pycharm是一個(gè)非常優(yōu)秀的代碼編輯、調(diào)試,開(kāi)發(fā)軟件,我平時(shí)在Windows系統(tǒng)學(xué)習(xí)編程時(shí)也比較喜歡使用Pycharm,這篇文章主要介紹了jetson上安裝pycharm的過(guò)程,需要的朋友可以參考下
    2022-07-07
  • python實(shí)現(xiàn)串口自動(dòng)觸發(fā)工作的示例

    python實(shí)現(xiàn)串口自動(dòng)觸發(fā)工作的示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)串口自動(dòng)觸發(fā)工作的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python類如何定義私有變量

    Python類如何定義私有變量

    這篇文章主要介紹了Python類如何定義私有變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論