首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入List[Dict]与List[dict]

输入List[Dict]与List[dict]
EN

Stack Overflow用户
提问于 2021-06-30 17:26:07
回答 3查看 11.9K关注 0票数 12

在向python函数添加类型提示时,哪个是首选?

代码语言:javascript
复制
from typing import List, Dict

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

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

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

这两者有什么区别吗?如果是,哪一种为首选?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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模块中删除。

票数 15
EN

Stack Overflow用户

发布于 2021-06-30 17:45:00

如果要使用listdict的订阅版本,则需要从支持“推迟对说明的评价”__future__模块中导入注释

此PEP建议更改函数注释和变量注释,以便不再在函数定义时对它们进行评估。相反,它们以字符串形式保存在注释中。 可以使用以下特殊导入从Python3.7开始启用上面描述的功能: 从__future__导入注释

因此,您可以这样做(在Python3.8中使用mypy测试):

代码语言:javascript
复制
from __future__ import annotations


def example() -> list[dict[str, str]]:
    return [{"1":"2"}]

在Python3.9中,这是默认行为,因此可以删除导入行,因为它总是延迟注释计算

代码语言:javascript
复制
def example() -> list[dict[str, str]]:
    return [{"1":"2"}]
票数 10
EN

Stack Overflow用户

发布于 2021-06-30 17:28:45

在影响类型覆盖方面没有实际差异。

作为风格/可读性的问题,我建议使用Dict[Any, Any] (如果您所使用的版本支持该版本,则使用dict[Any, Any] ),因为它使读者更清楚地看到,对dict的键和值没有类型检查。新手可能不明白普通的dict/Dict类型有多不安全,但是如果他们看到了Any,他们就更有可能意识到这种危险。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68199174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档