Python - 泛型



在 Python 中,泛型是一種機制,允許你定義可在多種型別上操作同時保持型別安全的函式、類或方法。泛型的實現使得編寫可重用程式碼成為可能,這些程式碼可用於不同的資料型別。它確保了程式碼靈活性和型別正確性。

通常,在 Python 程式設計中,不需要宣告變數型別。型別是由賦給它的值動態確定的。Python 的直譯器不執行型別檢查,因此可能會引發執行時異常。

Python 在 3.5 版本中引入了帶有 型別提示 的泛型,允許你指定變數、函式引數和返回值的預期型別。此功能有助於減少執行時錯誤並提高程式碼可讀性。

泛型透過引入型別變數擴充套件了型別提示的概念,型別變量表示泛型型別,在使用泛型函式或類時可以將其替換為特定型別。

定義泛型函式

讓我們來看一個定義泛型函式的例子:

from typing import List, TypeVar, Generic
T = TypeVar('T')
def reverse(items: List[T]) -> List[T]:
   return items[::-1]

這裡,我們定義了一個名為“reverse”的泛型函式。該函式接受一個列表('List[T]')作為引數,並返回相同型別的列表。型別變數“T”表示泛型型別,在使用該函式時將被替換為特定型別。

使用不同資料型別呼叫泛型函式

reverse() 函式使用不同的資料型別呼叫:

numbers = [1, 2, 3, 4, 5]
reversed_numbers = reverse(numbers)
print(reversed_numbers)

fruits = ['apple', 'banana', 'cherry']
reversed_fruits = reverse(fruits)
print(reversed_fruits)

它將產生以下輸出

[5, 4, 3, 2, 1]
['cherry', 'banana', 'apple']

定義泛型類

泛型型別通常透過在類名後新增型別引數列表來宣告。以下示例在泛型類中使用泛型:

from typing import List, TypeVar, Generic
T = TypeVar('T')
class Box(Generic[T]):
   def __init__(self, item: T):
      self.item = item
   def get_item(self) -> T:
      return self.item
Let us create objects of the above generic class with int and str type
box1 = Box(42)
print(box1.get_item())

box2 = Box('Hello')
print(box2.get_item())

它將產生以下輸出

42
Hello
廣告