?Python 3 新特性:類型註解

?Python 3 新特性:類型註解

來自專欄 Crossin的編程教室

前幾天有同學問到,這個寫法是什麼意思:

def add(x:int, y:int) -> int: return x + y

我們知道 Python 是一種動態語言,變數以及函數的參數是不區分類型。因此我們定義函數只需要這樣寫就可以了:

def add(x, y): return x + y

這樣的好處是有極大的靈活性,但壞處就是對於別人代碼,無法一眼判斷出參數的類型,IDE 也無法給出正確的提示。

於是 Python 3 提供了一個新的特性:

函數註解

也就是文章開頭的這個例子:

def add(x:int, y:int) -> int: return x + y

: 類型 的形式指定函數的參數類型,用 -> 類型 的形式指定函數的返回值類型。

然後特別要強調的是,Python 解釋器並不會因為這些註解而提供額外的校驗,沒有任何的類型檢查工作。也就是說,這些類型註解加不加,對你的代碼來說沒有任何影響

輸出:

但這麼做的好處是:

  1. 讓別的程序員看得更明白
  2. 讓 IDE 了解類型,從而提供更準確的代碼提示、補全和語法檢查(包括類型檢查,可以看到 str 和 float 類型的參數被高亮提示)

在函數的 __annotations__ 屬性中會有你設定的註解:

輸出:

在 Python 3.6 中,又引入了對變數類型進行註解的方法:

a: int = 123b: str = hello

更進一步,如果你需要指明一個全部由整數組成的列表:

from typing import Listl: List[int] = [1, 2, 3]

但同樣,這些僅僅是「註解」,不會對代碼產生任何影響。

不過,你可以通過 mypy 庫來檢驗最終代碼是否符合註解。

安裝 mypy:

pip install mypy

執行代碼:

mypy test.py

如果類型都符合,則不會有任何輸出,否則就會給出類似輸出:

這些新特性也許你並不會在代碼中使用,不過當你在別人的代碼中看到時,請按照對方的約定進行賦值或調用。

當然,也不排除 Python 以後的版本把類型檢查做到解釋器里,誰知道呢。

════

其他文章及回答:

如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 區塊鏈 | 人工智慧

歡迎關註:Crossin的編程教室


推薦閱讀:

數控人必修的UG偏置面技巧
學習SQL【5】-數據更新
這8個免費的網上課程可以有助你的技術成長
學習SQL【9】-集合與聯結

TAG:Python | 編程語言 | 自學編程 |