Python是一種動態(tài)類型語言会宪,這意味著我們在編寫代碼的時候更為自由,但是與此同時IDE無法向靜態(tài)類型語言那樣分析代碼蚯窥,及時給我們相應(yīng)的提示掸鹅。為了解決這個問題塞帐,Python 3.6 新增了幾個特性PEP 484和PEP 526,幫助編輯器為我們提供更智能的提示巍沙。這些新特性不會影響語言本身葵姥,只是增加一點提示。當(dāng)你使用比較智能的開發(fā)工具比如PyCHarm時句携,就會感覺到類型提示的方便之處榔幸。
變量注解
首先先看看變量注解。它的語法和某些類型后置的語言類似矮嫉。
# 變量注解
a: int = 5
b: bool = True
f: float = 5.0
s: str = "abc"
聲明類型之后削咆,編輯器和IDE就會讀取到這個類型注解,然后給予我們相應(yīng)的提示蠢笋。程序在運行的時候行為完全不變拨齐。
如果是自己編寫的類,也可以用作變量注解挺尿。
class MyClass:
def fun1(self):
print("fun1")
me: MyClass = MyClass()
me.fun1()
對于較復(fù)雜的內(nèi)置類型奏黑、泛型、生成器编矾、自定義類型等,需要引入標(biāo)準(zhǔn)庫typing
馁害。對于更復(fù)雜的類型窄俏,請直接參考typing標(biāo)準(zhǔn)庫文檔。
from typing import TypeVar, Iterable, Tuple, Dict, List
m: Dict[int, int] = {1: 1, 2: 2}
t: Tuple[int, ...] = (1, 2, 3)
l: List[int] = [1, 2, 3, 4]
函數(shù)注解
當(dāng)使用Python編寫復(fù)雜的函數(shù)時碘菜,我們常常為沒有合適的提示而苦惱凹蜈。函數(shù)注解可以幫助我們解決這個問題。
def add(a: int, b: int) -> int:
return a + b
為函數(shù)添加注解之后忍啸,當(dāng)我們調(diào)用這個函數(shù)的時候仰坦,編輯器就會給予對應(yīng)的提示。當(dāng)處理大型項目的時候计雌,這個特性會很有用悄晃。
函數(shù)注解保存在函數(shù)的__annotations__
屬性中,如果你準(zhǔn)備編寫程序讀取它凿滤,可以使用這個屬性妈橄。
print(add.__annotations__)