繁体   English   中英

如何正确运行注释/类型提示字符串列表

[英]How to properly function annotate / type hint a list of strings

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

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

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

TypeError: 'type' object is not subscriptable

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

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

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

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

在 Python 3.9+ 中,可以在类型注释中使用list (带有小写l ),并且您的代码应该按原样工作。 在旧版本的 Python 上,您需要导入typing.List并改用它

from typing import List

to_addresses: List[str]

注意大写L

您可能需要考虑更具体的内容。 为什么from_addressstr ,而to_addresseslist[str] 也许一个

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

会有帮助的。

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

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

不过,在 3.9 之前,您需要使用导入的List在 Python 3.7+中添加

from __future__ import annotations

在文件的顶部,允许使用list[int] (例如)。 但请注意,此导入仅影响注释

from __future__ import annotations只影响注释——只是冒号后面的东西。 它使得注释永远不会被评估

它仍然不允许list[int]在任意上下文中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM