Python函数参数类型标注使用普通{}与typing.Dict有什么区别
参考如下定义的函数:
import typing def foo(dict_1: {}, dict_2: typing.Dict): pass
两种参数类型标注的区别主要有以下几点:
- 语义完全不同
{}作为类型标注时,会被类型检查器识别为不含任何键的空字典类型,后续对dict_1做任何新增键、访问键的操作都会触发类型报错。typing.Dict是官方定义的标准字典泛型类型,未指定键值类型参数时默认等价于Dict[Any, Any],支持任意键值类型的字典,增删改查操作都不会触发类型校验错误。 - 兼容性不同
typing.Dict是Python 3.5引入类型提示体系时就推出的标准标注写法,所有支持类型检查的Python版本和工具都能正确识别。{}作为类型标注是TypedDict相关特性推出后的特殊写法,只有较新的类型检查器(如mypy 0.800+、pyright等)能正确识别语义,旧版本工具要么直接忽略该标注,要么会抛出识别错误。 - 适用场景不同
{}仅适合用来标注完全不会新增任何键的空字典参数,绝大多数业务场景下都不会用到这个写法。typing.Dict(Python 3.9+可直接替换为内置的dict)是通用的字典类型标注方式,适合所有需要标注字典类型的场景。
内容的提问来源于stack exchange,提问作者adamlitz
相关产品推荐
相关产品推荐

