python學習 型別註解,inspect模組

2021-10-03 01:30:07 字數 1223 閱讀 2452

函式定義的弊端

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用起來非常的舒適。但這種 舒適 是有代價的,我們可能聽說過一句形容動態語言的話,動態一時爽,一直動態一直爽。為什麼會這麼說?動態的...