【问题标题】:What type hint for heterogeneous variable length tuple in python?python中异构可变长度元组的类型提示是什么?
【发布时间】:2021-07-12 11:05:52
【问题描述】:

我写了一些python code,它将图形构造为dict,类似于标准库的graphlib。图构造维护一堆带有“退出”顶点的部分图。顶点是tuple[Graph, str],一旦知道该顶点的目的地,就可以改变节点。不是创建一个特殊用途的类型,而是将部分图加上顶点一起混合成一个元组,有点像 lisp 形式。我可以为这些使用什么类型声明?我尝试了以下但"..." is only allowed as the second of two arguments

from typing import Optional

Graph = dict[str, Optional["Graph"]]  # None is a terminal
GraphAndVertices = tuple[Graph, tuple[Graph, str], ...]

【问题讨论】:

  • 我不太了解你的实际字体布局,你能举个小例子吗? graphlib 将图描述为邻接图,它与您的 递归 Graph 完全不同,并且不使用与您的 tuple 类似的任何东西。
  • 请注意,元组中的T, ...表示相同类型元素的可变元组,而元组中的T1, T2表示distinct-type 元素的>固定 大小元组。你可以构造类似tuple[T1, T2]tuple[T1 | T2, ...]tuple[T1, T2, ...] 没有意义。
  • @MisterMiyagi 似乎 OP 试图描述一个可变长度的元组 (A, B) / (A, B, B) / (A, B, B, B) ,......我不认为这是元组的东西装备...

标签: python type-hinting python-typing


【解决方案1】:

正如 cmets 中所讨论的,我认为元组类型不适合这种注释。

我认为你可能有更好的时间重写东西

from typing import Optional

Graph = dict[str, Optional["Graph"]]
GraphAndVertices = tuple[Graph, tuple[tuple[Graph, str], ...]]

即将“尾部”保留在另一个可变长度的图/字符串对元组中。

【讨论】:

  • 谢谢@akx。我不愿意将GraphAndVertices 拆分为一个整体对其进行操作(例如,使用__iadd__ 添加顶点)。最终将您的建议更进一步,并将图形和顶点完全分开,在两个不同的变量中,仅在绝对必要时将它们组合起来。结果,代码可读性得到了提高!
猜你喜欢
  • 2022-09-23
  • 2011-05-11
  • 2018-03-10
  • 1970-01-01
  • 2015-12-10
相关资源
最近更新 更多