Python函数返回内层固定3个字符串的列表的列表,如何正确标注类型提示?
如何为返回固定长度内层列表的列表指定类型提示
你需要明确标注返回值是列表的列表,且每个内层列表恰好包含3个字符串,以下是针对不同Python版本的解决方案:
Python 3.12+(推荐)
Python 3.12支持PEP 646引入的泛型展开和固定长度列表类型,可直接写出精确的类型提示:
def foobar() -> list[[str, str, str]]: return [["str1", "str2", "str3"], ["str4", "str5", "str6"]]
这里[str, str, str]明确表示内层列表是包含3个字符串的固定长度列表,外层list[...]则表示由这类列表组成的列表。
Python 3.9-3.11
由于这几个版本的标准库类型系统不直接支持固定长度列表的标注,可借助typing_extensions库的FixedSizeList来实现精确类型提示:
- 先安装依赖:
pip install typing_extensions - 编写代码:
from typing import List from typing_extensions import FixedSizeList def foobar() -> List[FixedSizeList[str, 3]]: return [["str1", "str2", "str3"], ["str4", "str5", "str6"]]
FixedSizeList[str, 3]会告诉类型检查工具(如mypy、pyright),内层列表必须是包含3个字符串的列表,既匹配实际返回的结构,又明确了长度约束。
备选方案(仅作文档说明,无强类型检查)
如果暂时无法引入额外库,可通过Annotated添加长度元数据,用于文档提示:
from typing import List, Annotated def foobar() -> List[Annotated[list[str], "固定长度为3"]]: return [["str1", "str2", "str3"], ["str4", "str5", "str6"]]
这种方式不会被类型检查工具强制执行长度约束,但能清晰表达你的意图。
为什么你之前的写法不合适
- 初始的
List[List[str]]仅说明内层是字符串列表,但无法体现固定长度的约束; - 用
List[Tuple[str, str, str]]虽然能指定长度,但返回值实际是列表而非元组,类型提示与实际数据结构不匹配,会误导类型检查工具和其他开发者。
内容的提问来源于stack exchange,提问作者user25051166
相关产品推荐
相关产品推荐

