Python函数参数如何标注为列表的列表(嵌套列表)类型
你写的标注方式存在的问题
你写的def fun(words:(list,list))这种写法既没有可读性,也不能被Python的类型检查工具(比如mypy、pyright)正确识别。
这种写法本质是给参数加了一个值为(list, list)的元组注解,没有任何「元素为列表的嵌套列表」的语义,其他开发者看到也完全没法直观理解你要表达的参数类型。
嵌套列表的正确标注方式
分Python版本有两种规范写法:
- Python 3.9及以上版本
官方原生支持list的泛型标注,直接用方括号指定列表内部的元素类型即可,嵌套列表就嵌套写泛型参数:
# 仅标注是嵌套列表,不限制内层列表的元素类型 def fun(words: list[list]): # 你的业务代码 pass # 额外指定内层列表的元素是字符串,更严谨 def fun(words: list[list[str]]): pass
- Python 3.8及更早版本
需要从标准库的typing模块导入List类型来做标注:
from typing import List # 仅标注是嵌套列表 def fun(words: List[List]): pass # 标注内层列表元素为字符串 def fun(words: List[List[str]]): pass
补充说明:只有当你要标注的参数是固定长度、每个位置类型固定的元组时,才会用到(类型1, 类型2)对应的Tuple[Type1, Type2]写法,和你当前需要的嵌套列表场景完全无关。
内容的提问来源于stack exchange,提问作者Tereso del Río Almajano
相关产品推荐
相关产品推荐

