[英]How can I properly type annotate an expression that builds a List of Sequences?
[英]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_address
是str
,而to_addresses
是list[str]
? 也许一个
import typing
Address = typing.NewType("Address")
会有帮助的。
此语法现在在Python 3.9+中有效:
在类型注释中,您现在可以使用内置集合类型(例如
list
和dict
)作为泛型类型,而不是从typing
导入相应的大写类型(例如List
或Dict
)。
不过,在 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.