函式定義的弊端
python是動態語言,變數隨時可以被賦值,且能賦值為不同的型別 python不是靜態編譯型語言,變數型別是在執行期決定的 動態語言很靈活,但是這種特性也是弊端:
函式註解
python3.5引入 對函式的引數進行型別註解 對函式的返回值進行型別註解 只對函式引數做乙個輔助的說明,並不對函式引數進行型別檢查 提供給第三方工具,做**分析,發現隱藏的bug 函式註解的資訊,儲存在__annotations__屬性中
變數註解
python3.6引入, 注意它也只是一種對變數的說明,非強制, 是預設值
signature簽名
sig=inspect.signature(add)獲取函式簽名
sig.parameters函式的所有引數名稱及註解型別
sig.return_annotation返回值註解型別
sig.parameters["x"].annotation對應引數的註解型別
判斷語法
inspect.isfunction(add)是否是函式
inspect.ismethod(add)是否是類
inspect.isgenerator(add)是否是生成器
inspect.isgeneratorfunction(add)是否是生成器函式
inspect.isclass(add)是否是類
inspect.ismodule(inspect)是否是模組
inspect.isbuiltin(print)是否是內建函式
parameter物件
儲存在元組中,是唯讀的
name,引數的名字
annotation,引數的註解,可能沒有定義
default,引數的預設值,可能沒有定義
empty,特殊的類,用來標記default屬性或者注釋annotation屬性的空值
kind,實參如何繫結到形參,就是形參的型別
positional_only,值必須是位置引數提供
positional_or_keyword,值可以作為關鍵字或者位置引數提供
var_positional,可變位置引數,對應*args
keyword_only,keyword-only引數,對應*或者*args之後的出現的非可變關鍵字引數
var_keyword,可變關鍵字引數,對應**kwargs
python型別註解
使用 加型別代表返回值型別 python直譯器執行時並不會檢查型別,型別不對也不會拋異常,僅僅是註解而已。示例 def plus a int,b int 2 int return a bpython 解析器並不會在意型別註解,嚴格來說這是不對的,python 會把型別資訊放在 annotations...
Python 3 型別註解
python 是一種動態語言,變數以及函式的引數是不區分型別。因此我們定義函式只需要這樣寫就可以了 def add x,y return x y用 型別 的形式指定函式的引數型別,用 型別 的形式指定函式的返回值型別。from typing import list def twosum self,n...
python 編碼中為什麼要寫型別註解?
我們先談談為什麼在python編碼過程中強烈推薦使用型別註解 python對於初學者來說是非常好上手,原因是在於對計算機底層原理的高度封裝和動態語言的特性使得python用起來非常的舒適。但這種 舒適 是有代價的,我們可能聽說過一句形容動態語言的話,動態一時爽,一直動態一直爽。為什麼會這麼說?動態的...