未定义嵌套列表深度的嵌套列表的Python注释类型

问题描述 投票:0回答:2

[[1, 2, 3], 3, [2, 4], 5]
的类型是
list[list[int] | int]
。但是,如果嵌套列表的深度未定义,那么它会具有什么类型,例如
[[[1, 2]], 2, [1, [3, [3]]]], 3, [2, [2]]]

python annotations typing
2个回答
4
投票

您可以定义递归类型别名:

T: TypeAlias = list[Union[int, 'T']]

0
投票

现在PEP 695已被接受,您可以在Python 3.12中执行以下操作:

type NestedList = list[int | NestedList]

请注意,您甚至可以将

"
放在
NestedList
周围,因为它不再是前向引用。

您甚至可以将其设为泛型类型,以便您可以轻松获取嵌套列表,例如字符串而不是整数:

type NestedList[T] = list[T | NestedList[T]]
nest_string_list: NestedList[str] = []
如果您使用选项

enable_incomplete_feature = ["NewGenericSyntax"]

,则 
mypy 从 1.11 版开始接受此设置。我想下个版本会完全支持。

© www.soinside.com 2019 - 2024. All rights reserved.