在 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
让我们使用 int
和 str
类型创建上述泛型类的对象:
box1 = Box(42)
print(box1.get_item())
box2 = Box('Hello')
print(box2.get_item())
这将产生以下输出:
42
Hello