Python中的類型

Python中的類型

本文解釋了Python中的類型。

YouTube Video

Python中的類型

typing模組用於在Python中引入類型提示。它最初在Python 3.5中引入,用於提高代碼的可讀性和可維護性。類型提示不會影響代碼的運行,但允許使用IDE和靜態分析工具進行類型檢查。

類型提示的基礎

類型提示通過明確指定函數和變數的類型來澄清代碼意圖。在下面的範例中,為參數和返回值指定了類型。

1def add_numbers(a: int, b: int) -> int:
2    return a + b
3
4result: int = add_numbers(5, 10)
5print(result)  # 15

在上述代碼中,ab為整數類型(int),函數的返回值也明確聲明為整數。即使使用類型提示,類型也不會被嚴格強制執行,但如果有類型不匹配,在開發過程中可能會顯示警告。

關鍵類型提示

Python中的typing模組提供了多種類和函數以定義類型提示。以下是一些常見的類型提示列表。

  • int:整數
  • str:字串
  • float:浮點數
  • bool:布林值
  • List:列表
  • Dict:字典
  • Tuple:元組
  • Set:集合

List 類型

列表型別是使用 List 類別來指定的。您也可以明確指定列表內元素的型別。

1from typing import List
2
3def sum_list(numbers: List[int]) -> int:
4    return sum(numbers)
5
6print(sum_list([1, 2, 3]))  # 6

在此範例中,列表中的所有元素預期為 int 型別。

Dict 型別

字典型別是使用 Dict 定義的。可以指定鍵和值的型別。

1from typing import Dict
2
3def get_student_age(students: Dict[str, int], name: str) -> int:
4    return students.get(name, 0)
5
6students = {"Alice": 23, "Bob": 19}
7print(get_student_age(students, "Alice"))  # 23

在此範例中,字典使用 str 作為鍵的型別,int 作為值的型別。

Tuple 型別

元組使用 Tuple 型別來指定。您可以個別指定元組中每個元素的型別。

1from typing import Tuple
2
3def get_person() -> Tuple[str, int]:
4    return "Alice", 30
5
6name, age = get_person()
7print(name, age)  # Alice 30

在這裡,get_person 函數返回了一個包含字符串和整數的元組。

Union 型別

Union 型別用於明確指示可以接受多種型別。

1from typing import Union
2
3def process_value(value: Union[int, float]) -> float:
4    return value * 2.0
5
6print(process_value(10))  # 20.0
7print(process_value(3.5))  # 7.0

在此範例中,process_value 函數接受 intfloat 作為參數,並返回 float 型別的結果。

Optional 型別

當變數可能為 None 時,使用 Optional 型別。它可以作為 Union[Type, None] 的簡寫。

1from typing import Optional
2
3def greet(name: Optional[str] = None) -> str:
4    if name is None:
5        return "Hello, Guest!"
6    return f"Hello, {name}!"
7
8print(greet())  # Hello, Guest!
9print(greet("Alice"))  # Hello, Alice!

在此範例中,當 name 未被指定時,其值將被視為 None

泛型型別

泛型型別是一種用於抽象表示資料結構中所包含元素型別的方法。在 typing 模組中,您可以使用 TypeVar 定義泛型型別。

1from typing import TypeVar, List
2
3T = TypeVar('T')
4
5def get_first_element(elements: List[T]) -> T:
6    return elements[0]
7
8print(get_first_element([1, 2, 3]))  # 1
9print(get_first_element(["a", "b", "c"]))  # a

在此範例中,get_first_element 是一個函數,它返回列表的第一個元素,且不依賴於列表的型別。

型別別名

型別別名是一種透過為複雜的型別定義提供清晰名稱來簡化的方法。

1from typing import List, Tuple
2
3Coordinates = List[Tuple[int, int]]
4
5def get_coordinates() -> Coordinates:
6    return [(0, 0), (1, 1), (2, 2)]
7
8print(get_coordinates())  # [(0, 0), (1, 1), (2, 2)]

在此範例中,型別別名 Coordinates 被定義來簡單地表示含有元組的列表型別。

總結

Python 中的 typing 模組對於提高程式碼的可讀性和可維護性非常有用。通過正確使用型別提示,可以幫助防止型別不匹配和錯誤,特別是在大型專案或團隊開發中。型別僅僅是一種開發輔助工具,不會影響執行時的行為,因此能保持程式碼的靈活性。

您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。

YouTube Video