我正在试验该typing模块,我想知道如何正确输入像九角形(9 点多边形)这样的东西,它应该是元组而不是列表,因为它应该是不可变的。
在 2D 空间中,它会是这样的:
Point2D = Tuple[float, float]
Nonagon = Tuple[Point2D, Point2D, Point2D, Point2D, Point2D, Point2D, Point2D, Point2D, Point2D]
nine_points: Nonagon = (
(0.0, 0.0),
(6.0, 0.0),
(6.0, 2.0),
(2.0, 2.0),
(6.0, 5.0),
(2.0, 8.0),
(6.0, 8.0),
(6.0, 10.0),
(0.0, 10.0),
)
Run Code Online (Sandbox Code Playgroud)
是否有任何语法糖可以使 Nonagon 声明更短或更容易阅读?
这不是有效的Python,但我正在寻找与此类似的东西:
Nonagon = Tuple[*([Point2D] * 9)] # Not valid Python
Run Code Online (Sandbox Code Playgroud)
或者使用NamedTuple
# Not properly detected by static type analysers
Nonagon = NamedTuple('Nonagon', [(f"point_{i}", Point2D) for i in range(9)])
Run Code Online (Sandbox Code Playgroud)
这不是我想要的:
# Valid …Run Code Online (Sandbox Code Playgroud)