?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 解釋器並不會因為這些註解而提供額外的校驗,沒有任何的類型檢查工作。也就是說,這些類型註解加不加,對你的代碼來說沒有任何影響:
輸出:
但這麼做的好處是:
- 讓別的程序員看得更明白
- 讓 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】-集合與聯結