在为Python函数添加类型提示时,哪种方式更受推荐?
from typing import List, Dict
def example_1() -> List[Dict]:
pass
def example_2() -> List[dict]:
pass
我知道如果我想在字典中指定键和值类型,我需要使用Dict,但我不想这样做。
这两种方法有什么区别吗?如果有,哪一种更好?
在为Python函数添加类型提示时,哪种方式更受推荐?
from typing import List, Dict
def example_1() -> List[Dict]:
pass
def example_2() -> List[dict]:
pass
我知道如果我想在字典中指定键和值类型,我需要使用Dict,但我不想这样做。
这两种方法有什么区别吗?如果有,哪一种更好?
自 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
模块中删除。
就类型覆盖率的影响而言,实际上不存在实质性的区别。
从风格和可读性的角度考虑,我建议使用 Dict[Any, Any]
(如果您的版本支持,也可以使用 dict[Any, Any]
),因为它更容易让读者明白字典的键和值没有进行类型检查。初学者可能不了解裸的dict
/Dict
类型的不安全性,但他们更可能会在其中看到Any
时认识到危险。