摘要:背景閑來無事想熟悉一下的裝飾器寫法,就寫了一個簡單的類型檢查裝飾器。思路利用帶參數的裝飾器直接傳入變量的預期類型,然后使用檢查類型。
背景
閑來無事想熟悉一下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
什么是裝飾器? 裝飾器就是用來裝飾函數。 想要增強原有函數的功能 但不希望修改原有函數的定義 在代碼運行期間動態增加功能的方式 函數嵌套函數 調用方式:原函數 = 外層函數(原函數名)原函數 def desc(fun): def add_info(): print(happy today) fun() print(westos_linux...
摘要:初步認識裝飾器函數裝飾器用于在源代碼中標記函數,以某種方式增強函數的行為。函數裝飾器在導入模塊時立即執行,而被裝飾的函數只在明確調用時運行。只有涉及嵌套函數時才有閉包問題。如果想保留函數原本的屬性,可以使用標準庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現參數化裝飾器,最后介紹標準庫中常用的裝飾器。 1. 初步認識裝飾器 函數裝飾...
摘要:使用一年多了,一直知道有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。 使用python一年多了,一直知道python有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。python的裝飾器本身的功能是在不改變已有函數本身的...
摘要:類是一個在范圍內的可變整數序列。因此,構造函數參數解釋請參考。如果省略了,它將默認為零,并且構造函數用作像和這樣的數字轉換。該函數刪除指定的屬性只要該對象允許。返回表示當前全局符號表的字典。將整數轉換為以為前綴的小寫十六進制字符串。 微信公眾號: Python數據科學 來源:https://juejin.im/post/5ae3ee...翻譯總結自官方文檔:https://docs.p...
摘要:示例如下靜態路由使用動態變量的路由未指定變量類型使用動態變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數參數傳入進來。 開始決定認真的在網上寫一些東西,主要原因還是在于希望能提升學習效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發現很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎開始,退回來好好看看官方文檔,再...
閱讀 1629·2023-04-25 18:27
閱讀 1389·2021-10-19 11:44
閱讀 563·2021-10-14 09:42
閱讀 2138·2021-10-11 10:59
閱讀 2769·2021-09-24 09:47
閱讀 1723·2019-08-30 14:20
閱讀 1150·2019-08-30 14:08
閱讀 731·2019-08-29 15:15