TypedDict():Python中的新型字典类型
在 Python 3.8 版本中引入了一种新的字典类型 TypedDict,它可以定义字典的键和值的类型。这是一个非常方便的特性,可以用来提高代码的可读性和可靠性。本文将介绍 TypedDict 的用法,并给出一些使用 TypedDict 的例子。
在 Python 中,字典是一种非常常用的数据结构。然而,原生的字典类型对键和值的类型没有严格的限制,这就意味着我们可以随意地向字典中插入任意类型的键和值。这对于一些特定的场景,比如在一些函数中期望接受特定类型的字典作为参数,或者在使用字典类型作为数据结构存储特定类型的对象时,可能会造成问题。
为了解决这个问题,Python 引入了 TypedDict 类型。TypedDict 是一种字典类型,在定义时可以指定字典的键和值的类型。TypedDict 可以通过继承字典类型来实现,也可以通过直接调用 typing 包中的 TypedDict 函数来定义。
下面是一个使用 TypedDict 定义字典类型的例子:
from typing import TypedDict
class Movie(TypedDict):
title: str
year: int
rating: float
在上面的例子中,我们通过继承 TypedDict 类型来定义了一个名为 Movie 的字典类型。这个 Movie 字典类型有三个键值对,分别是 title、year 和 rating。它们的值的类型分别是 str、int 和 float。
有了这个定义,我们就可以使用这个 Movie 字典类型来创建符合指定键和值类型的字典对象了:
movie: Movie = {
"title": "Inception",
"year": 2010,
"rating": 8.8
}
在上面的例子中,我们使用 Movie 类型来声明了一个字典变量 movie。然后,我们给这个字典变量赋值一个符合 Movie 类型要求的字典。由于我们在定义 Movie 类型时指定了键和值的类型,因此 Python 会在编译时检查我们给字典变量赋值的字典是否符合定义的类型。
如果我们给字典变量赋值的字典不符合定义的类型,Python 会在编译时抛出一个类型错误:
movie: Movie = {
"title": "Inception",
"year": 2010,
"rating": "8.8" # 这里的 rating 应该是 float 类型,但赋值了一个 str 类型的值
}
上面的代码会抛出一个类型错误,提示我们 rating 的类型不正确。
在使用 TypedDict 定义字典类型时,还可以使用 Optional 类型来表示键的可选性。下面是一个使用 TypedDict 定义字典类型的例子:
from typing import TypedDict, Optional
class Person(TypedDict):
name: str
age: Optional[int]
email: Optional[str]
在上面的例子中,我们定义了一个名为 Person 的字典类型,它有三个键值对。其中,name 的值是必需的,并且类型是 str;age 和 email 的值是可选的,并且类型分别是 int 和 str。
有了这个定义,我们就可以创建符合指定键和值类型的字典对象了:
person: Person = {
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}
上面的例子中,我们给字典变量 person 赋值一个符合 Person 类型要求的字典。由于 age 和 email 是可选的,因此我们可以选择不给它们赋值。
总结一下,TypedDict 是 Python 3.8 引入的一种新的字典类型,可以在定义字典类型时指定键和值的类型。使用 TypedDict 可以提高代码的可读性和可靠性,避免在使用字典时出现类型错误。在定义 TypedDict 时,还可以使用 Optional 类型来表示键的可选性。在使用 TypedDict 定义字典类型时,可以通过继承 TypedDict 类型或者调用 typing 包中的 TypedDict 函数来实现。
