向函式新增型別
讓我們舉一個函式的例子,它接收兩個引數並返回一個表示其總和的值:
def two_sum(a, b):
return a + b
通過檢視此程式碼,人們無法安全且毫無疑問地指出函式 two_sum
的引數型別。它在提供 int
值時都有效:
print(two_sum(2, 1)) # result: 3
和字串:
print(two_sum("a", "b")) # result: "ab"
和其他值,如 list
s,tuple
s 等。
由於 python 型別的這種動態特性,其中許多型別適用於給定的操作,任何型別檢查器都無法合理地斷言是否應該允許對此函式的呼叫。
為了幫助我們的型別檢查器,我們現在可以在函式定義中為它提供型別提示,指示我們允許的型別。
為了表明我們只想允許 int
型別,我們可以將我們的函式定義更改為:
def two_sum(a: int, b: int):
return a + b
註釋遵循引數名稱,並由:
字元分隔。
同樣,為了表明只允許 str
型別,我們將更改我們的函式來指定它:
def two_sum(a: str, b: str):
return a + b
除了指定引數的型別之外,還可以指示函式呼叫的返回值。這是通過在引數列表中但在函式宣告結尾的:
之前新增 ->
字元後跟型別後面的型別來完成的 :
def two_sum(a: int, b: int) -> int:
return a + b
現在我們已經指出呼叫 two_sum
時的返回值應該是 int
型別。同樣,我們可以為 str
,float
,list
,set
等定義適當的值。
雖然型別提示主要由型別檢查器和 IDE 使用,但有時你可能需要檢索它們。這可以使用 __annotations__
特殊屬性來完成:
two_sum.__annotations__
# {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}