TypedDict():Python中类型提示的进一步增强
在Python 3.8版本中,引入了一个新的类装饰器@runtime_checkable和一个新的泛型类型TypedDict,用于在类型提示中进一步增强。本文将介绍TypedDict的概念和使用方法,并通过一些实例来说明其用法。
TypedDict是Python 3.8版本中新增加的一种字典类型,它用于指定字典键和键对应的值的类型。与普通的字典不同,TypedDict可以为每个键指定值类型,并且在类型检查时会根据TypedDict的定义进行验证。这在具有复杂结构的数据和函数参数传递中非常有用。
要声明一个TypedDict,可以使用typing模块中的TypedDict泛型类。具体的语法如下:
from typing import TypedDict
class MyDict(TypedDict):
key1: int
key2: str
my_dict: MyDict = {"key1": 123, "key2": "hello"}
在上述示例中,我们定义了一个TypedDict子类MyDict,它具有两个键:key1和key2,对应的值类型分别为int和str。在创建my_dict实例时,我们需要确保键和值的类型与类型提示一致。
TypedDict中的键可以具有默认值,就像普通的字典一样:
from typing import TypedDict
class MyDict(TypedDict):
key1: int
key2: str
key3: bool = True
my_dict: MyDict = {"key1": 123, "key2": "hello"}
在上述示例中,我们为TypedDict中的键key3指定了默认值True。在创建my_dict实例时,如果没有为key3特别指定值,将自动使用默认值。
TypedDict还可以包含必须的和可选的键,就像函数参数中的必须参数和关键字参数一样:
from typing import TypedDict
class MyDict(TypedDict):
key1: int
key2: str
key3: bool = True
key4: float
my_dict: MyDict = {"key1": 123, "key2": "hello", "key4": 3.14}
在上面的示例中,key1、key2和key4是必须的键,而key3是可选的键。创建my_dict实例时,我们需要提供必须的键,而可选的键可以选择性地提供。
当使用TypedDict时,可以使用mypy等静态类型检查工具进行类型检查。以下是一个使用TypedDict和mypy进行类型检查的简单示例:
from typing import TypedDict
class MyDict(TypedDict):
key1: int
key2: str
def process_data(data: MyDict) -> None:
print(data["key1"])
print(data["key2"])
data = {"key1": 123, "key2": "hello"}
process_data(data)
上述示例中,我们定义了一个接受MyDict类型参数的函数process_data。我们使用mypy运行类型检查命令时,将不会对该函数产生类型错误。
使用mypy运行类型检查命令:
mypy script.py
在上述示例中,如果我们将data的值更改为不符合MyDict类型提示的值,mypy将会报错。
总结:
TypedDict是Python 3.8版本中引入的一种有类型提示的字典类型。它允许我们在字典定义中指定键和键对应的值的类型,并在类型检查时进行验证。TypedDict在使用复杂结构的数据和函数参数传递时非常有用。使用mypy等静态类型检查工具,可以更好地发现错误和提高代码的可靠性。
