我给了Python模块typing
一个镜头。
我知道它是有效的指定类似下面的List
的长度*:
List[float, float, float] # List of 3 floats <-- NOTE: this is not valid Python
是否有较长的列表任何速记?如果我想怎么把它设置为10辆花车?
List[float * 10] # This doesn't work.
任何想法,如果这是可能的,这将是得心应手。
*注:事实证明,以这种方式提供多个参数来Sequence[]
(及其子类),目前还没有有效的Python。此外,它是目前无法使用Sequence
模块以这种方式来指定typing
长度。
你不能。列表是可变的,可变长结构。如果你需要一个固定长度的结构,使用一个元组,而不是:
Tuple[float, float, float, float, float, float, float, float, float, float]
或者更好的是,使用named tuple,其中有两个指数和命名的属性:
class BunchOfFloats(NamedTuple):
foo: float
bar: float
baz: float
spam: float
ham: float
eggs: float
monty: float
python: float
idle: float
cleese: float
列表是简单地为一个固定长度的数据结构中的错误的数据类型。
到目前为止,只有元组支持字段指定一个固定数量,它有没有捷径的固定数量的重复。
下面是来自typing
模块定义和文档字符串:
class Tuple(tuple, extra=tuple, metaclass=TupleMeta):
"""Tuple type; Tuple[X, Y] is the cross-product type of X and Y.
Example: Tuple[T1, T2] is a tuple of two elements corresponding
to type variables T1 and T2. Tuple[int, float, str] is a tuple
of an int, a float and a string.
To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].
"""
__slots__ = ()
def __new__(cls, *args, **kwds):
if _geqv(cls, Tuple):
raise TypeError("Type Tuple cannot be instantiated; "
"use tuple() instead")
return _generic_new(tuple, cls, *args, **kwds)
由于名单是可变的,可变长度的类型,它没有任何意义,使用类型声明指定一个固定的大小。