【问题标题】:何时/为什么使用类型模块中的类型作为类型提示
【发布时间】:2022-01-23 16:46:13
【问题描述】:
什么是类型提示的“正确”方式?
我的 IDE(和生成的代码)使用以下任一选项都可以很好地用于类型提示,但是可以从类型模块中导入某些类型。是否偏好使用从类型模块导入而不是内置函数(如列表或字典)?
例子:
from typing import Dict
def func_1(arg_one: Dict) -> Dict:
pass
和
def func_2(arg_one: dict) -> dict:
pass
【问题讨论】:
标签:
python
types
type-hinting
【解决方案1】:
“正确”的方法是尽可能使用内置函数(例如 dict 而不是 typing.Dict)。仅当您使用 Python typing.Dict。在旧版本中,您不能在内置函数中使用像 dict[str, Any] 这样的通用注释,您必须使用 Dict[str, Any]。见PEP 585
【解决方案2】:
typing.Dict 和dict 没有太大区别。
只是typing.Dict实际上是一个通用类型,所以它允许你在括号内指定子类型。
喜欢:
from typing import Dict
def func_1(arg_one: Dict[str, int]) -> Dict:
pass
但typing.Dict 仅在您的 Python 版本低于 3.9 时才需要。否则,您可以对常规 dicts 执行相同操作。
示例 Python >= 3.9:
def func_1(arg_one: dict[str, int]) -> dict:
pass