Python 作為一種動態語言,優雅簡潔的語法使得開發者可以快速地撰寫程式碼。然而,在大型專案或團隊合作中,強化程式碼的可讀性、可維護性和錯誤檢測是至關重要的。Python 的 typing 模組在這方面扮演了重要的角色,它允許我們為 Python 程式碼添加靜態型別提示(Type Hints),讓 IDE 和靜態類型檢查工具能更容易協助開發者發現錯誤和改進程式碼。
什麼是 typing 模組?
typing
模組是 Python 3.5 以後加入的內建模組,它提供了一組用於指定變數、函式回傳值、函式參數等型別提示的工具。儘管 Python 依然是動態型別的語言,typing
模組能夠為我們的程式碼帶來更豐富的型別資訊,讓開發者在撰寫程式碼時更容易瞭解資料的形式與用途。
使用 Type Hints 增強型別提示
在 Python 中,型別提示是指在變數、函式參數和回傳值等地方添加型別資訊,以便在開發過程中更容易理解程式碼的意圖。typing
模組中的 Type Hints 提供了各種內建型別(如 int
、str
、list
等)以及用於創建自定義型別的工具。以下是一些 Type Hints 的常見用法和案例:
基本型別提示
from typing import List
def get_square_root(number: float) -> float:
return number ** 0.5
# Usage
numbers_list: List[int] = [1, 4, 9, 16]
result = get_square_root(25)
print(result) # Output:5.0
在這個例子中,我們使用 float
和 List[int]
等 Type Hints 指定了函式參數和變數的型別,讓開發者知道這些資料的類型,提高程式碼的可讀性。
使用 TypeVar 創建泛型型別
from typing import TypeVar, List
T = TypeVar('T')
def find_item(items: List[T], target: T) -> int:
return items.index(target)
# Usage
fruits = ['apple', 'banana', 'orange']
index = find_item(fruits, 'banana')
print(index) # Output:1
index = find_item(fruits, 'orange')
print(index) # Output:2
在這個例子中,我們使用 TypeVar
創建了一個泛型型別 T
,它可以代表任意型別。在函式 find_item()
中,我們使用了 T
作為 List
的元素型別和 target
的型別,這樣就能夠同時支援不同型別的列表和目標值。
使用 Depends 實現依賴注入
除了增強型別提示,typing
模組還提供了 Annotated
類型用於實現依賴注入(Dependency Injection),這在 Web 框架中非常有用,特別是在 FastAPI 等框架中。
from typing import Annotated
from fastapi import Depends
T = Annotated[int, Depends(lambda: 42)]
def example_function(input_value: T) -> T:
return input_value
# Usage
result1 = example_function(10)
print(result1) # Output: 10
result2 = example_function()
print(result2) # Output:42
在這個例子中,我們使用 Depends
和 Annotated
來實現依賴注入。在 FastAPI 中,Depends
用於注入依賴項,Annotated
用於指定型別並提供相關的依賴。在函式 example_function()
中,我們使用 T
作為參數的型別提示,同時指定了一個依賴函式 lambda: 42
,如果沒有傳入參數,則使用默認值 42
。
結論
typing
模組是 Python 中一個強大的工具,它讓開發者能夠增強型別提示,提高程式碼的可讀性和可維護性。通過使用 Type Hints,開發者可以清晰地指定變數、函式參數和回傳值的型別,讓開發過程更加順暢。同時,typing
模組中的 Annotated
和 Depends
等特性也讓開發者更容易在 Web 開發中實現依賴注入。希望本文能幫助讀者更好地理解 typing
模組的用法,提升 Python 程式碼的品質和效率。
《DTW 數位科技週報》
如果想要每週獲得最新的數位科技、區塊鏈及人工智慧新聞整理,歡迎訂閱免費電子報:《DTW 數位科技週報》