python參數注解


函數定義的弊端:

python是動態語言,變量隨時可以被賦值,且能賦值為不同的類型,動態語言很靈活,但是這種特性也是弊端

難發現:由於不做任何類型檢查,直到運行期問題才顯現出來,或者線上運行時才能暴露出問 題 

難使用:函數的使用者看到函數的時候,並不知道你的函數的設計,並不知道應該傳入什么類 型的數據

如何解決這種動態語言的弊端?

函數注解:

python3.5引入, 對函數的參數進行類型注解 ,對函數的返回值進行類型注解 ,只對函數參數做一個輔助的說明,並不對函數參數進行類型檢查 , 提供給第三方工具,做代碼分析,發現隱藏的bug ,函數注解的信息,保存在__annotations__屬性中

 

函數參數類型檢查:

函數參數的檢查一定是在函數外,函數應該作為參數,傳入到檢查函數中,檢查函數拿到函數傳入的實際參數,與形參聲明對比,__annotations__屬性是一個字典,其中包括返回值類型的聲明。假設要做位置參數的判斷,無 法和字典中的聲明對應。使用inspect模塊 ,該模塊提供獲取對象信息的函數,可以檢查函數和類,類型檢查。

 

inspect模塊

 signature(callable),獲取簽名(函數簽名包含了一個函數的信息,包括函數名、它的參數類型、它 所在的類和名稱空間及其他信息) 

 inspect.isfunction(add),是否是函數 

  inspect.ismethod(add)),是否是類的方法 

  inspect.isgenerator(add)),是否是生成器對象 

 inspect.isgeneratorfunction(add)),是否是生成器函數 

inspect.isclass(add)),是否是類 

 還有很多is函數,需要的時候查閱inspect模塊幫助

 

Parameter對象:保存在元組中,是只讀的 ; name,參數的名字 ; annotation,參數的注解,可能沒有定義 ;default,參數的缺省值,可能沒有定義 ;empty,特殊的類,用來標記default屬性或者注釋annotation屬性的空值 ; kind,實參如何綁定到形參,就是形參的類型 

例:檢查用戶輸入是否符合參數注解的要求?

思路:調用時,判斷用戶輸入的實參是否符合要求,用戶感覺上還是在調用原函數,對用戶輸入的數據和聲明的類型進行對比,如果不符合,提示用戶。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM