如何为可变长度Python列表或None编写类型注解?
可变长度Python列表或None的类型注解写法
错误原因分析
你之前的写法存在两个问题:
list[str, ...]:在Python 3.9版本之前,内置的list不是泛型类型,无法直接通过下标指定元素类型;即使在3.9+版本,list的泛型参数只需要传入元素类型,...是多余的——list[str]本身就代表任意长度的字符串列表。List[str, ...]:typing.List作为泛型类,仅接受一个类型参数(即列表元素的类型),...不属于合法的类型参数,因此触发报错。
正确写法
根据你的Python版本,选择对应的写法:
Python 3.10+(推荐)
直接使用原生联合类型语法|,无需额外导入:
def some_function(params: list[str] | None) -> None: # 函数逻辑 pass
或者导入typing.Optional来表示可选类型:
from typing import Optional def some_function(params: Optional[list[str]]) -> None: # 函数逻辑 pass
Python 3.9及更早版本
需要从typing模块导入List和Optional:
from typing import List, Optional def some_function(params: Optional[List[str]]) -> None: # 函数逻辑 pass
关键说明
list[str](或List[str])已经涵盖了任意长度的字符串列表,不需要额外标记可变长度。Optional[T]等价于T | None,用于表示参数可以是T类型或者None。
内容的提问来源于stack exchange,提问作者masaaa015
相关产品推荐
相关产品推荐

