Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类型提示:typing.Mapping与typing.Dict_Python_Python 3.x_Type Hinting - Fatal编程技术网

Python类型提示:typing.Mapping与typing.Dict

Python类型提示:typing.Mapping与typing.Dict,python,python-3.x,type-hinting,Python,Python 3.x,Type Hinting,我正在从事一个python3项目,在该项目中,我们始终使用键入模块类型提示 似乎我们使用typing.Dict和typing.Mapping几乎可以互换 有什么理由选择其中一个而不是另一个吗?我自己设法回答了这个问题 typing.Dict应用于指示支持元素类型暗示的文本Dict类型,即Dict[bytes,str] typing.Mapping是一个对象,它定义了\uuuu getitem\uuuuuuuuuuuuuuuuuuu、\uuuuuuu iter\uuuuuuuuuuu魔术方法 ty

我正在从事一个python3项目,在该项目中,我们始终使用
键入
模块类型提示

似乎我们使用
typing.Dict
typing.Mapping
几乎可以互换


有什么理由选择其中一个而不是另一个吗?

我自己设法回答了这个问题

typing.Dict
应用于指示支持元素类型暗示的文本
Dict
类型,即
Dict[bytes,str]

typing.Mapping
是一个对象,它定义了
\uuuu getitem\uuuuuuuuuuuuuuuuuuu、\uuuuuuu iter\uuuuuuuuuuu
魔术方法

typing.MutableMapping
是一个与Mapping定义相同的对象,但也具有
\uuuuuuuu setitem\uuuuuuuuuuuuuu、\uuuuuuuuu delitem\uuuuuuuuuuu
魔术方法


typing.Mapping等是基于

中的abc类型的。dicts是一种映射
dict
是一种更具体的映射,它就像一个序列与一个列表dicts是可变的&一种特定的实现<代码>映射是一个接口,是不可变的。要成为
映射
它必须以某种方式定义所有这些方法,但是如果实现抽象方法并从集合继承,则将提供mixin方法。abc.Mapping经验法则:除泛型类型外,返回特定类型。这为函数和类的用户提供了最大的灵活性和安全性
Dict
是不变的,
Mapping
是协变的。例如,当您有一个函数接收
Dict[a,B]
并尝试传递
Dict[a,C]
时,这一点很重要,其中
C
B
的子类型。使用
映射[A,B]
可以避免键入错误,请参阅。