Python - 泛型



在 Python 中,泛型是一种机制,您可以使用它定义可以对多种类型进行操作的函数、类或方法,同时保持类型安全。通过实现 Generics enable,可以编写可用于不同数据类型的可重用代码。它确保提高代码的灵活性和类型的正确性。

通常,在 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