首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型-在不太冗长的情况下提示元组

类型-在不太冗长的情况下提示元组
EN

Stack Overflow用户
提问于 2021-08-11 10:39:22
回答 1查看 96关注 0票数 2

有没有一种方法可以在不多次定义每个内部元素的情况下输入一个元素元组?

示例:

代码语言:javascript
复制
a = ((1, 2), (2, 3), (3, 4), (4, 5))

a: Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]

我在找可能像这样的东西。

代码语言:javascript
复制
a: Tuple[5*Tuple[int, int]]

否则,我的代码将变得非常冗长,以便指示类似的东西(元组包含5个4整型的元组)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 11:32:46

这里有几个选择。(这里的所有示例都假定为a = ((1, 2), (3, 4), (5, 6), (7, 8)),即由4个(<int>, <int>)元组组成的tuple。)

您可以像注释中所建议的那样,只对内部类型使用类型别名:

代码语言:javascript
复制
from typing import Tuple

X = Tuple[int, int]
a: Tuple[X, X, X, X]

如果注释仍然太长,您还可以为整个注释使用类型别名,也许可以使用typing.Annotated来阐明代码中发生了什么:

代码语言:javascript
复制
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注释的同质序列(可能是可变的,也可能是不可变的),这将非常有用

代码语言:javascript
复制
from typing import Sequence, Tuple

a: Sequence[Tuple[int, int]]

您可以通过使用带有文字省略号的Tuple来实现与Sequence相同的功能。这里的省略号表示元组将是长度不定但类型相同的元组。

代码语言:javascript
复制
from typing Sequence, Tuple

a: Tuple[Tuple[int, int], ...]

然而,与使用带省略号的Tuple相比,我更喜欢使用Sequence。它更简洁,对我来说似乎是一种更直观的语法(...用于表示与typing模块的其他部分中的Any类似的东西,比如Callable),并且我很少发现通过告诉类型检查器我的不可变的Sequence专门属于tuple类型会有什么好处。然而,这只是我的观点。

最后一个选项可能是对变量a使用NamedTuple而不是tuple。但是,如果元组中的所有项都是同构类型,那么这就有点夸张了。(NamedTuple对于注释异构元组最有用。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68740412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档