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

TypedDict():使用typing_extensions为Python字典添加类型注解

发布时间:2023-12-16 17:57:01

TypedDict是Python 3.8中引入的一个新特性,它是用于对字典类型进行类型注解的工具。它允许我们为字典的键和值指定类型,并且可以确保字典在运行时的键和值满足类型注解的约束。

TypedDict使用了typing模块的一个子模块typing_extensions,因此在使用之前需要先安装typing_extensions库。

下面是一个使用TypedDict的简单示例:

from typing_extensions import TypedDict

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

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

print(person["name"])  # John
print(person["age"])  # 25

在上面的例子中,我们定义了一个名为Person的TypedDict,并为它的键name和age指定了类型注解。然后我们创建了一个符合这些类型注解的字典,将其赋值给变量person,并且可以通过键来访问字典的值。

使用TypedDict有以下几个特点:

1. 键的命名和类型注解是必需的,值的类型注解是可选的。

2. 与普通字典不同,对于同一个键的多次赋值会引发TypeError异常。

3. 使用类型注解来创建字典时,键是不可变的(immutable)。

下面是一个更复杂的示例,演示了如何在TypedDict中使用列表和嵌套字典:

from typing import List
from typing_extensions import TypedDict

class Movie(TypedDict):
    title: str
    year: int
    actors: List[str]
    director: dict[str, str]

movie: Movie = {
    "title": "Inception",
    "year": 2010,
    "actors": ["Leonardo DiCaprio", "Joseph Gordon-Levitt"],
    "director": {"name": "Christopher Nolan", "nationality": "British"}
}

print(movie["title"])  # Inception
print(movie["actors"])  # ["Leonardo DiCaprio", "Joseph Gordon-Levitt"]
print(movie["director"]["name"])  # Christopher Nolan

在上面的示例中,我们在TypedDict中使用了列表和嵌套字典的类型注解。我们通过键actors和director分别注解了一个列表和一个嵌套字典的值。然后我们创建了一个符合这些类型注解的字典,并且可以通过键来访问字典的值。

总结一下,TypedDict是一个非常有用的工具,它为Python字典提供了类型注解的功能,可以在代码中增加静态检查的可靠性。尽管它在Python 3.8中引入,但可以通过使用typing_extensions库来支持更早期的Python版本。