国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【Python】使用裝飾器為Python實現運行時類型檢查

jonh_felix / 1026人閱讀

摘要:背景閑來無事想熟悉一下的裝飾器寫法,就寫了一個簡單的類型檢查裝飾器。思路利用帶參數的裝飾器直接傳入變量的預期類型,然后使用檢查類型。

背景
閑來無事想熟悉一下Python的裝飾器寫法,就寫了一個簡單的類型檢查裝飾器。
思路
利用帶參數的裝飾器直接傳入變量的預期類型,然后使用isinstance檢查類型。
代碼
def typeLimits(*types, **typesdict):
    def desc(func):
        def f(*args, **kwargs):
            for i, v in enumerate(types):
                if not isinstance(args[i], v):
                    raise Exception("Need a {} where {} is not.".format(v.__name__, args[i]))
            for parm in typesdict:
                if kwargs.get(parm, None) is None:
                    raise Exception("Need parameter {}.".format(parm))
                if not isinstance(kwargs[parm],typesdict[parm]):
                    raise Exception("Need a {} for {} where {} is not.".format(typesdict[parm].__name__, parm, kwargs[parm]))
            return func(*args, **kwargs)
        return f
    return desc

@typeLimits(int, str)
def printOneIntAndOneString(n, s):
    print(n ** 2, s.upper())

@typeLimits(int, name = str)
def printOneIntAndName(n, name):
    print(n + n, name.upper())

printOneIntAndOneString(1,"abc") # 正確執行

# printOneIntAndOneString(1 + 2,3 + 4) 報錯

printOneIntAndName(1, name = "aaa") 正確執行

# printOneIntAndName(1) 報錯

# printOneIntAndName(1, name = 2.0) 報錯
感想
這只是一個游戲之作,檢查類型會耗費一些性能,真正部署運行的項目是不需要類型檢查的,但可以在測試的時候使用類型檢查來避免一些無謂的錯誤。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38177.html

相關文章

  • python_bomb----小白學裝飾

    什么是裝飾器? 裝飾器就是用來裝飾函數。 想要增強原有函數的功能 但不希望修改原有函數的定義 在代碼運行期間動態增加功能的方式 函數嵌套函數 調用方式:原函數 = 外層函數(原函數名)原函數 def desc(fun): def add_info(): print(happy today) fun() print(westos_linux...

    mikasa 評論0 收藏0
  • Python學習之路26-函數裝飾器和閉包

    摘要:初步認識裝飾器函數裝飾器用于在源代碼中標記函數,以某種方式增強函數的行為。函數裝飾器在導入模塊時立即執行,而被裝飾的函數只在明確調用時運行。只有涉及嵌套函數時才有閉包問題。如果想保留函數原本的屬性,可以使用標準庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現參數化裝飾器,最后介紹標準庫中常用的裝飾器。 1. 初步認識裝飾器 函數裝飾...

    sunny5541 評論0 收藏0
  • python裝飾器入門小結

    摘要:使用一年多了,一直知道有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。 使用python一年多了,一直知道python有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。python的裝飾器本身的功能是在不改變已有函數本身的...

    SunZhaopeng 評論0 收藏0
  • Python內建函數大全

    摘要:類是一個在范圍內的可變整數序列。因此,構造函數參數解釋請參考。如果省略了,它將默認為零,并且構造函數用作像和這樣的數字轉換。該函數刪除指定的屬性只要該對象允許。返回表示當前全局符號表的字典。將整數轉換為以為前綴的小寫十六進制字符串。 微信公眾號: Python數據科學 來源:https://juejin.im/post/5ae3ee...翻譯總結自官方文檔:https://docs.p...

    PascalXie 評論0 收藏0
  • flask文檔學習筆記1-快速入門

    摘要:示例如下靜態路由使用動態變量的路由未指定變量類型使用動態變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數參數傳入進來。 開始決定認真的在網上寫一些東西,主要原因還是在于希望能提升學習效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發現很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎開始,退回來好好看看官方文檔,再...

    lingdududu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<