我试图弄清楚如何正确地使用注释或键入提示字符串列表。例如,如果我有这样的函数:
def send_email(self, from_address: str, to_address: list[str]):
pass
地址应该是字符串列表。但是当我尝试使用该注释时,我的Python 3.4.3解释器中出现以下错误:
TypeError:'type'对象不可订阅
我很肯定list[str]
导致了这个问题,因为如果我将其更改为str
,则错误会消失,但这并不能正确反映我对该参数的意图。
答案 0 :(得分:8)
Python 3.4没有为其功能注释指定格式,它只提供了一种机制,允许您使用任何表达式作为注释。如何解释注释取决于您和您使用的库。
Python 3.5将标准化函数注释用于类型提示的方式,如PEP 484中所述。要注释字符串列表,您可以使用List[str]
,其中从List
模块导入typing
。如果您的函数接受任何类似列表的序列,也可以使用Sequence[str]
,或者对任何可迭代的序列使用Iterable[str]
。
答案 1 :(得分:4)
此语法现在在 Python 3.9+ 中有效:
<块引用>在类型注释中,您现在可以使用内置集合类型(例如 list
和 dict
)作为泛型类型,而不是导入相应的大写类型(例如 List
或 {{1} }) 来自Dict
。
在 3.9 之前,您需要使用导入的 typing
或 in 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")
很有帮助。