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

TypedDict()和typing_extensions:Python中字典类型注解的新方式

发布时间:2023-12-16 17:59:04

Python中的字典是一种非常常见的数据结构,用于存储键值对的集合。在Python的类型注解中,我们可以使用字典类型注解来标明一个变量或函数的参数是一个字典类型。然而,在一些复杂的情况下,字典类型注解可能会变得很复杂和难以理解。为了解决这个问题,Python中引入了 TypedDict 类型和 typing_extensions 模块。

TypedDict 类型和 typing_extensions 模块是从 Python 3.8 版本开始引入的,它们提供了一种新的方式来注解字典类型。TypedDict 类型允许我们定义一个具有固定键和类型的字典类型。与常规的字典类型注解不同,TypedDict 类型允许我们指定每个键的类型。这样可以更清晰地说明字典应该包含的键和值的类型。

要使用 TypedDict 类型和 typing_extensions 模块,我们首先需要导入 typing_extensions 模块,然后使用 TypedDict 类型来定义一个新的字典类型。以下是一个使用 TypedDict 类型注解变量的例子:

from typing_extensions import TypedDict

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

person: Person = {"name": "Alice", "age": 25}

在上面的例子中,我们首先导入了 typing_extensions 模块中的 TypedDict 类型。然后,我们使用 TypedDict 类型定义了一个名为 Person 的新字典类型,该字典类型具有两个键:name 和 age。每个键的类型分别为 str 和 int。最后,我们定义了一个变量 person,它被注解为 Person 类型,并赋值为一个包含 name 和 age 键值对的字典。

在这个例子中,使用 TypedDict 类型注解的变量 person,可以通过类型检查,因为它符合 Person 类型的定义。如果我们尝试添加不符合 Person 类型定义的键和值,例如:

person["gender"] = "female"

在这种情况下,类型检查将会引发错误,因为 Person 类型没有定义 gender 键。

TypedDict 类型还支持可选键。我们可以在键后面加上 Optional 来标记该键是可选的。以下是一个包含可选键的例子:

from typing import Optional
from typing_extensions import TypedDict

class Person(TypedDict):
    name: str
    age: int
    gender: Optional[str]

person: Person = {"name": "Alice", "age": 25}

在上面的例子中,我们在 Person 类型中添加了一个可选键 gender,类型为 str 或 None。这意味着在 person 字典中可以包含 gender 键,也可以不包含 gender 键。

TypedDict 类型还支持嵌套字典类型注解。以下是一个使用嵌套字典类型注解的例子:

from typing import Dict
from typing_extensions import TypedDict

class Location(TypedDict):
    lat: float
    lng: float

class Person(TypedDict):
    name: str
    age: int
    location: Dict[str, Location]

person: Person = {
    "name": "Alice",
    "age": 25,
    "location": {"home": {"lat": 12.34, "lng": 56.78}, "work": {"lat": 90.12, "lng": 34.56}}
}

在上面的例子中,我们使用嵌套字典类型注解来定义了一个包含 location 键的 Person 类型。location 键的值是一个字典,其中键是 str 类型,值是 Location 类型的字典。Location 类型是另一个 TypedDict 类型,该类型定义了两个键:lat 和 lng,类型分别为 float。这个例子展示了如何在字典的值中使用不同的 TypedDict 类型。

TypedDict 类型和 typing_extensions 模块提供了一种新的方式来注解字典类型,使得类型注解更灵活和易于理解。它允许我们在字典类型中明确指定每个键的类型,从而更准确地表示变量的约束条件。尽管 TypedDict 类型和 typing_extensions 模块在 Python 3.8 中引入,但它们在更早的版本中也可以通过安装 typing_extensions 包来使用。