在向python函数添加类型提示时,哪个是首选?
from typing import List, Dict
def example_1() -> List[Dict]:
pass
def example_2() -> List[dict]:
pass我知道,如果我想在dict中指定键和值类型,我需要使用Dict,但我不想使用。
这两者有什么区别吗?如果是,哪一种为首选?
发布于 2021-06-30 17:32:47
从Python3.9开始,可以订阅标准集合。因此,typing变体是现在不赞成了:
元组# typing.Tuple 列表# typing.List dict # typing.Dict set # typing.Set ..。 从
typing导入这些信息是不可取的。由于PEP 563以及将输入的运行时影响降到最低的意图,这种弃用不会生成DeprecationWarning。相反,当检查程序的目标版本被指示为Python3.9或更高版本时,类型检查程序可能会警告这种不推荐的使用。建议允许这些警告在整个项目的基础上被压制。 在Python3.9.0发布5年后发布的第一个Python版本中,不推荐的功能将从typing模块中删除。
发布于 2021-06-30 17:45:00
如果要使用list和dict的订阅版本,则需要从支持“推迟对说明的评价”的__future__模块中导入注释
此PEP建议更改函数注释和变量注释,以便不再在函数定义时对它们进行评估。相反,它们以字符串形式保存在注释中。 可以使用以下特殊导入从Python3.7开始启用上面描述的功能: 从__future__导入注释
因此,您可以这样做(在Python3.8中使用mypy测试):
from __future__ import annotations
def example() -> list[dict[str, str]]:
return [{"1":"2"}]在Python3.9中,这是默认行为,因此可以删除导入行,因为它总是延迟注释计算
def example() -> list[dict[str, str]]:
return [{"1":"2"}]发布于 2021-06-30 17:28:45
在影响类型覆盖方面没有实际差异。
作为风格/可读性的问题,我建议使用Dict[Any, Any] (如果您所使用的版本支持该版本,则使用dict[Any, Any] ),因为它使读者更清楚地看到,对dict的键和值没有类型检查。新手可能不明白普通的dict/Dict类型有多不安全,但是如果他们看到了Any,他们就更有可能意识到这种危险。
https://stackoverflow.com/questions/68199174
复制相似问题