Python Typing List[Dict]与List[dict]的区别

20

在为Python函数添加类型提示时,哪种方式更受推荐?

from typing import List, Dict

def example_1() -> List[Dict]:
    pass

def example_2() -> List[dict]:
    pass

我知道如果我想在字典中指定键和值类型,我需要使用Dict,但我不想这样做。

这两种方法有什么区别吗?如果有,哪一种更好?


哦,我不知道。这是在哪个版本中引入的? - Keverly
我投票将此标记为Difference between defining typing.Dict and dict?的重复。 - mkrieger1
2个回答

30

自 Python 3.9 开始,标准集合类型可以用下标访问。因此 typing 变量已经过时

tuple # typing.Tuple

list # typing.List

dict # typing.Dict

set # typing.Set

...

不再建议从 typing 导入这些变量。由于 PEP 563 的存在以及为了最小化类型检查对运行时的影响,该过时功能不会产生 DeprecationWarning 警告。相反,当检查的程序目标版本为 Python 3.9 或更新版本时,类型检查器可能会警告此类已过时的用法。建议在项目范围内允许消除这些警告。

该过时功能将在 Python 3.9.0 发布后 5 年的第一个 Python 版本中从 typing 模块中删除。


6

就类型覆盖率的影响而言,实际上不存在实质性的区别。

从风格和可读性的角度考虑,我建议使用 Dict[Any, Any](如果您的版本支持,也可以使用 dict[Any, Any]),因为它更容易让读者明白字典的键和值没有进行类型检查。初学者可能不了解裸的dict/Dict类型的不安全性,但他们更可能会在其中看到Any时认识到危险。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接