欢迎访问宙启技术站
智能推送

Python中的typing_extensions模块之TypedDict()详解

发布时间:2023-12-16 17:50:53

在Python中,typing_extensions模块提供了一些扩展类型提示的功能,使代码更加健壮和可读性更强。其中一个重要的功能是TypedDict,它允许我们声明一个字典的结构和元素的类型。

在Python 3.8之前,我们只能使用Dict[str, Any]来表示一个字典。但是这样的类型提示是不够严谨的,因为它允许我们在字典中添加任意类型的键和值。而TypedDict允许我们指定字典的键和值的类型,从而提供更好的类型检查。

TypedDict的使用方法相对简单,我们只需要创建一个继承自TypedDict的子类,并在子类中定义字典的结构和元素的类型。

下面是一个使用TypedDict的例子,我们创建了一个名为Person的字典类型,它有两个键值对,分别是nameage,它们的值的类型分别是strint

from typing_extensions import TypedDict

class Person(TypedDict):
    name: str
    age: int

person: Person = {'name': 'John', 'age': 30}

在上面的例子中,我们首先导入TypedDict类。然后,我们创建一个名为PersonTypedDict子类,其中有两个属性nameage,它们的类型分别为strint

在使用时,我们可以像使用普通字典一样创建Person类型的变量,但是类型是受限制的。在上面的例子中,我们创建了一个名为person的变量,它是一个Person类型的字典,其中包含了nameage两个键值对。

当我们使用TypedDict类型的变量时,IDE或静态类型检查工具会自动检查我们的代码,确保我们不会添加或使用不兼容的键和值。

person['name'] = 'Alice'  # 正确,name的类型为str
person['age'] = '20'  # 错误,age的类型应为int,不能赋值为str
person['gender'] = 'female'  # 错误,gender是未定义的键
person[1] = 'hello'  # 错误,键的类型应为str,不能赋值为int

在上面的示例中,我们尝试给person变量赋值不同类型的值。 个赋值是正确的,因为name键的值的类型是str。第二个赋值是错误的,因为age键的值的类型应为int,而不是str。然后,我们尝试给person添加一个新的键gender,这也是错误的,因为Person类中未定义键gender。最后一个赋值也是错误的,因为键的类型应为str,而不是int

正因为上述原因,TypedDict类在声明字典结构时非常有用,因为它在编译时就能检查出类型错误,避免在运行时产生潜在的错误。

总结来说,typing_extensions模块的TypedDict类允许我们在Python中创建更具体且可信的字典类型。通过定义字典键的结构和元素的类型,我们可以在编译时就发现类型错误,从而提高代码的健壮性和可读性。