有没有一种方法可以在不多次定义每个内部元素的情况下输入一个元素元组?
示例:
a = ((1, 2), (2, 3), (3, 4), (4, 5))
a: Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]我在找可能像这样的东西。
a: Tuple[5*Tuple[int, int]]否则,我的代码将变得非常冗长,以便指示类似的东西(元组包含5个4整型的元组)
发布于 2021-08-11 11:32:46
这里有几个选择。(这里的所有示例都假定为a = ((1, 2), (3, 4), (5, 6), (7, 8)),即由4个(<int>, <int>)元组组成的tuple。)
您可以像注释中所建议的那样,只对内部类型使用类型别名:
from typing import Tuple
X = Tuple[int, int]
a: Tuple[X, X, X, X]如果注释仍然太长,您还可以为整个注释使用类型别名,也许可以使用typing.Annotated来阐明代码中发生了什么:
from typing import Tuple, Annotated
X = Tuple[int, int]
IntTupleSequence = Annotated[
Tuple[X, X, X, X],
"Some useful metatadata here giving "
"some documentation about this type alias"
]
a: IntTupleSequence您还可以使用typing.Sequence,如果您有一个长度不确定或太长而无法使用typing.Tuple注释的同质序列(可能是可变的,也可能是不可变的),这将非常有用
from typing import Sequence, Tuple
a: Sequence[Tuple[int, int]]您可以通过使用带有文字省略号的Tuple来实现与Sequence相同的功能。这里的省略号表示元组将是长度不定但类型相同的元组。
from typing Sequence, Tuple
a: Tuple[Tuple[int, int], ...]然而,与使用带省略号的Tuple相比,我更喜欢使用Sequence。它更简洁,对我来说似乎是一种更直观的语法(...用于表示与typing模块的其他部分中的Any类似的东西,比如Callable),并且我很少发现通过告诉类型检查器我的不可变的Sequence专门属于tuple类型会有什么好处。然而,这只是我的观点。
最后一个选项可能是对变量a使用NamedTuple而不是tuple。但是,如果元组中的所有项都是同构类型,那么这就有点夸张了。(NamedTuple对于注释异构元组最有用。)
https://stackoverflow.com/questions/68740412
复制相似问题