如何正确地使用注释/类型提示函数提示字符串列表

时间:2015-08-09 15:04:22

标签: python

我试图弄清楚如何正确地使用注释或键入提示字符串列表。例如,如果我有这样的函数:

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

地址应该是字符串列表。但是当我尝试使用该注释时,我的Python 3.4.3解释器中出现以下错误:

  

TypeError:'type'对象不可订阅

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

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

<块引用>

在类型注释中,您现在可以使用内置集合类型(例如 listdict)作为泛型类型,而不是导入相应的大写类型(例如 List 或 {{1} }) 来自Dict

在 3.9 之前,您需要使用导入的 typingin Python 3.7+,您可以添加

List

在文件的顶部,允许使用 from __future__ import annotations (例如)。

答案 2 :(得分:1)

您需要导入

from typing import List
List[str]

注意大写L。

在python 3.9+中,小写字母l也支持泛型。

您可能需要考虑更具体的内容。为什么to_adress是一个Str,而from_Adress是一个List [Str]?也许

Adress = typing.NewType("Adress")

很有帮助。