typing.Dict和Dict的区别以及它们在Python中的用途

当在 Python 函数中声明一个 dictionary 作为参数时,我们一般会把 key 和 value 的数据类型声明为全局变量,而不是局部变量。

如果我们需要将字典的键和值的数据类型声明为一个局部变量,该怎么办?这篇文章讨论了我们如何使用typing.Dict 的类型提示,并将其与通常的dict 函数区分开来。

typing.Dictdict 之间的区别以及它们在 Python 中的用途

在 Python 函数中声明一个字典作为参数时,使用typing.Dict 和普通的dict 在现实世界中没有区别。

然而,typing.Dict 函数是一个通用类型的函数,可以让我们指定键和值的数据类型,使其更加灵活。

此外,由于我们不能静态地推断容器中通用保存的对象的类型信息,抽象基类已经被扩展,以支持订阅来表示容器元素的通用类型。

def exampleFunction(typing.Dict[str, int])

例如,在我们项目生命周期的某一时刻,我们想更精确地定义字典参数,此时将typing.Dict 扩展为typing.Dict[key_type, value_type] 比用dict() 替换整个字典是更小的改变。

我们可以通过使用MappingMutableMapping 类型使我们的字典更通用。dictionary 是一种映射,但是我们可以创建满足映射接口的其它对象。

def exampleFunction(typing.Mapping[str,int])

注意,Python 并不强制执行类型提示。它们只是提示,并不用于在运行时或编译时实现类型。

然而,如果我们使用 Python 3.9 及以上版本,Python 已经废弃了typing.Dict ,而是在内置的dict() 命令中强制执行类型提示。我们可以在 Python 中声明一个字典时指定类型。

def exampleFunction(dict[str,int])