摘要:背景閑來無事想熟悉一下的裝飾器寫法,就寫了一個簡單的類型檢查裝飾器。思路利用帶參數(shù)的裝飾器直接傳入變量的預(yù)期類型,然后使用檢查類型。
背景
閑來無事想熟悉一下Python的裝飾器寫法,就寫了一個簡單的類型檢查裝飾器。思路
利用帶參數(shù)的裝飾器直接傳入變量的預(yù)期類型,然后使用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") # 正確執(zhí)行 # printOneIntAndOneString(1 + 2,3 + 4) 報錯 printOneIntAndName(1, name = "aaa") 正確執(zhí)行 # printOneIntAndName(1) 報錯 # printOneIntAndName(1, name = 2.0) 報錯感想
這只是一個游戲之作,檢查類型會耗費一些性能,真正部署運行的項目是不需要類型檢查的,但可以在測試的時候使用類型檢查來避免一些無謂的錯誤。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38177.html
什么是裝飾器? 裝飾器就是用來裝飾函數(shù)。 想要增強原有函數(shù)的功能 但不希望修改原有函數(shù)的定義 在代碼運行期間動態(tài)增加功能的方式 函數(shù)嵌套函數(shù) 調(diào)用方式:原函數(shù) = 外層函數(shù)(原函數(shù)名)原函數(shù) def desc(fun): def add_info(): print(happy today) fun() print(westos_linux...
摘要:初步認(rèn)識裝飾器函數(shù)裝飾器用于在源代碼中標(biāo)記函數(shù),以某種方式增強函數(shù)的行為。函數(shù)裝飾器在導(dǎo)入模塊時立即執(zhí)行,而被裝飾的函數(shù)只在明確調(diào)用時運行。只有涉及嵌套函數(shù)時才有閉包問題。如果想保留函數(shù)原本的屬性,可以使用標(biāo)準(zhǔn)庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現(xiàn)參數(shù)化裝飾器,最后介紹標(biāo)準(zhǔn)庫中常用的裝飾器。 1. 初步認(rèn)識裝飾器 函數(shù)裝飾...
摘要:使用一年多了,一直知道有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡單記錄下。 使用python一年多了,一直知道python有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡單記錄下。python的裝飾器本身的功能是在不改變已有函數(shù)本身的...
摘要:類是一個在范圍內(nèi)的可變整數(shù)序列。因此,構(gòu)造函數(shù)參數(shù)解釋請參考。如果省略了,它將默認(rèn)為零,并且構(gòu)造函數(shù)用作像和這樣的數(shù)字轉(zhuǎn)換。該函數(shù)刪除指定的屬性只要該對象允許。返回表示當(dāng)前全局符號表的字典。將整數(shù)轉(zhuǎn)換為以為前綴的小寫十六進制字符串。 微信公眾號: Python數(shù)據(jù)科學(xué) 來源:https://juejin.im/post/5ae3ee...翻譯總結(jié)自官方文檔:https://docs.p...
摘要:示例如下靜態(tài)路由使用動態(tài)變量的路由未指定變量類型使用動態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進來。 開始決定認(rèn)真的在網(wǎng)上寫一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎(chǔ)開始,退回來好好看看官方文檔,再...
閱讀 1643·2023-04-25 18:27
閱讀 1396·2021-10-19 11:44
閱讀 572·2021-10-14 09:42
閱讀 2147·2021-10-11 10:59
閱讀 2779·2021-09-24 09:47
閱讀 1729·2019-08-30 14:20
閱讀 1161·2019-08-30 14:08
閱讀 740·2019-08-29 15:15