当前位置: 首页 > 知识库问答 >
问题:

如何正确地对字符串列表进行注释/键入提示

赫连越
2023-03-14

我试图找出如何正确的功能注释或类型提示字符串列表。例如,如果我有一个这样的函数:

def send_email(self, from_address: str, to_addresses: list[str]):
    pass

to_addresses应该是一个字符串列表。但是当我尝试使用这个注释时,我在Python 3.4.3解释器中得到了以下错误:

类型对象不可下标

我肯定是list[str]导致了问题,因为如果我将其更改为str,错误就会消失,但这并不能正确反映我对参数的意图。

共有3个答案

郤令
2023-03-14

此语法现在在Python 3.9中有效:

在类型注释中,您现在可以使用内置集合类型,例如listdict作为泛型类型,而不是从键入中导入相应的大写类型(例如listdict)。

但是,在3.9之前,您需要使用导入的列表,或者在Python3.7中可以添加

from __future__ import annotations

在文件的顶部,它允许使用list[int](例如)。

杜昆琦
2023-03-14

在Python 3.9中,可以在类型注释中使用list(小写为l),您的代码应该按原样工作。在旧版本的Python中,您需要导入类型。列出并改用它

from typing import List

to_addresses: List[str]

注意大写L

你可能想考虑一些更具体的事情。为什么from_addressastr,而to_address是一个列表[str]?也许是

import typing
Address = typing.NewType("Address")

会有帮助的。

云昊阳
2023-03-14

Python 3.4没有为其函数注释指定格式,它只是提供了一种机制,允许您使用任何表达式作为注释。如何解释注释取决于您和您使用的库。

Python 3.5标准化了函数注释用于类型提示的方式,如PEP 484中所述。要注释字符串列表,请使用List[str],其中List是从typing模块导入的。如果您的函数接受任何类似列表的序列,您也可以使用Sequence[str],或者Iterable[str]用于任何迭代。

从Python3.9开始,您可以使用list[str]作为类型注释,而不需要导入任何内容。

 类似资料:
  • 问题内容: 我正在搜索页面,您可以在其中输入搜索查询并将表单提交到。什么PHP函数是最好的,我应该使用它对搜索查询进行编码/解码? 问题答案: 对于URI查询,请使用;对于其他任何事情,请使用/。 和之间的区别是 根据 application/x-www-form-urlencoded编码(空格用编码),而 根据简单的 Percent-Encoding编码 (空格使用编码)。

  • 问题内容: 在Python中创建按字母顺序排序的列表的最佳方法是什么? 问题答案: 基本答案: 这会修改你的原始列表(即就地排序)。要获得列表的排序副本,而无需更改原始副本,请使用以下函数: 但是,上面的示例有些天真,因为它们没有考虑区域设置,而是执行区分大小写的排序。你可以利用可选参数key指定自定义排序顺序(使用,则是不推荐使用的解决方案,因为它必须多次评估- key每个元素仅计算一次)。 因

  • 问题内容: 我对使用Spring将对象注入到类中有疑问。我在项目中使用了以下代码: 然后通常在以下方法上使用它: 否则,我在Spring示例中发现了注入构造函数的情况: 所以两者都正确吗?还是每个都有其属性和用法? 问题答案: tl; dr-构造函数注入是执行DI的最佳方法 后者是正确的,并不是因为Spring或任何依赖注入容器,而是面向对象的类设计原则。 细节 应该设计一种类型,以便您只能根据其

  • 问题内容: 我知道这听起来微不足道,但是我没有意识到 的功能很奇怪。我有一个实际上是字符串形式的“数字”列表,因此我先将它们转换为整数,然后尝试进行排序。 给我: 我想要的是 我四处寻找与排序数字集相关的算法,但是我发现所有算法都涉及对字母数字集进行排序。 我知道这可能是个没有脑子的问题,但是google和我的教科书没有提供比该.sort()功能有用的功能。 问题答案: 您实际上尚未将字符串转换为

  • 在过去,我使用Spring的XML配置连接bean,在这种情况下,我可以这样做(假设bean有属性的公共setter): 当使用基于注释的配置时,是否存在类似的情况?

  • 问题内容: 我正在尝试对包含数字的字符串列表进行排序 但是列表是排序而不是列表 问题答案: 您要基于值(而不是字符串值)进行排序,因此请尝试: