讓你的Python程式碼擁有型別提示

過了即是客發表於2017-08-27

Python是一種動態型別語言,這意味著我們在編寫程式碼的時候更為自由,但是與此同時IDE無法向靜態型別語言那樣分析程式碼,及時給我們相應的提示。為了解決這個問題,Python 3.6 新增了幾個特性PEP 484PEP 526,幫助編輯器為我們提供更智慧的提示。這些新特性不會影響語言本身,只是增加一點提示。當你使用比較智慧的開發工具比如PyCHarm時,就會感覺到型別提示的方便之處。

變數註解

首先先看看變數註解。它的語法和某些型別後置的語言類似。

# 變數註解
a: int = 5
b: bool = True
f: float = 5.0
s: str = "abc"

宣告型別之後,編輯器和IDE就會讀取到這個型別註解,然後給予我們相應的提示。程式在執行的時候行為完全不變。

如果是自己編寫的類,也可以用作變數註解。

class MyClass:
    def fun1(self):
        print("fun1")


me: MyClass = MyClass()
me.fun1()

對於較複雜的內建型別、泛型、生成器、自定義型別等,需要引入標準庫typing。對於更復雜的型別,請直接參考typing標準庫文件

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]

函式註解

當使用Python編寫複雜的函式時,我們常常為沒有合適的提示而苦惱。函式註解可以幫助我們解決這個問題。

def add(a: int, b: int) -> int:
    return a + b

為函式新增註解之後,當我們呼叫這個函式的時候,編輯器就會給予對應的提示。當處理大型專案的時候,這個特性會很有用。

函式註解儲存在函式的__annotations__屬性中,如果你準備編寫程式讀取它,可以使用這個屬性。

print(add.__annotations__)


相關文章