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

新手上路,请多包涵

我想弄清楚如何正确运行注释或类型提示字符串列表。例如,如果我有这样的功能:

 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 错误消失了,但这并没有正确反映我对参数的意图。

原文由 gnychis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 597
2 个回答

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

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

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

原文由 interjay 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

from typing import List

to_addresses: List[str]

注意资本 L

您可能需要考虑更具体的事情。为什么 from_address A list[str] str to_addresses 也许一个

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

会有帮助的。

原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题