Hit*_*uca 4 python type-hinting python-typing
有没有一种方法可以输入提示元素元组,而不必多次定义每个内部元素?
例子:
a = ((1, 2), (2, 3), (3, 4), (4, 5))
a: Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]
Run Code Online (Sandbox Code Playgroud)
我正在寻找看起来像这样的东西
a: Tuple[5*Tuple[int, int]]
Run Code Online (Sandbox Code Playgroud)
否则我的代码会变得非常冗长,以便指示类似的内容(包含 5 个 4 个整数的元组的元组)
这里有几个选项。(此处所有示例均假设a = ((1, 2), (3, 4), (5, 6), (7, 8)),即 atuple由 4 个元组组成(<int>, <int>)。)
正如评论中所建议的,您可以仅使用内部类型的类型别名:
from typing import Tuple
X = Tuple[int, int]
a: Tuple[X, X, X, X]
Run Code Online (Sandbox Code Playgroud)
如果整个注释仍然太长,您还可以使用类型别名,也许可以用来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
Run Code Online (Sandbox Code Playgroud)
您还可以使用typing.Sequence,如果您有一个同质序列(可能是可变的或不可变的),该序列要么长度不确定,要么太长而无法使用 进行注释,这非常有用typing.Tuple:
from typing import Sequence, Tuple
a: Sequence[Tuple[int, int]]
Run Code Online (Sandbox Code Playgroud)
Sequence您可以实现与使用Tuple文字省略号相同的效果。这里的省略号表示元组的长度不确定,但类型相同。
from typing Sequence, Tuple
a: Tuple[Tuple[int, int], ...]
Run Code Online (Sandbox Code Playgroud)
不过,我更喜欢使用Sequence省略号Tuple。它更简洁,对我来说似乎是一种更直观的语法(...用于表示与模块Any其他部分类似的东西typing,例如Callable),并且我很少发现通过告诉类型检查器我的不可变Sequence是特定的类型可以获得任何东西tuple。不过,这只是我的意见。
最后一个选择可能是使用 aNamedTuple而不是tuplefor 变量a。但是,如果元组中的所有项目都是同质类型,那么这可能有点过分了。(NamedTuple对于注释异构元组最有用。)
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |