Je donne une chance au module Python typing
).
Je sais qu'il est valide de spécifier la longueur d'un List
comme suit *:
List[float, float, float] # List of 3 floats <-- NOTE: this is not valid Python
Y a-t-il un raccourci pour des listes plus longues? Et si je veux le mettre à 10 flotteurs?
List[float * 10] # This doesn't work.
Toute idée si cela est possible, ce serait pratique.
* REMARQUE: Il s'avère que fournir plusieurs arguments à Sequence[]
(et ses sous-classes) de cette manière n'est actuellement PAS un Python valide. De plus, il n'est actuellement pas possible de spécifier une longueur Sequence
en utilisant le module typing
de cette manière.
Tu ne peux pas. Une liste est une structure modifiable, de longueur variable. Si vous avez besoin d'une structure de longueur fixe, utilisez plutôt un tuple:
Tuple[float, float, float, float, float, float, float, float, float, float]
Ou mieux encore, utilisez un nommé Tuple , qui a à la fois des indices et des attributs nommés:
class BunchOfFloats(NamedTuple):
foo: float
bar: float
baz: float
spam: float
ham: float
eggs: float
monty: float
python: float
idle: float
cleese: float
Une liste est tout simplement le mauvais type de données pour une structure de données de longueur fixe.
Jusqu'à présent, seuls les tuples prennent en charge la spécification d'un nombre fixe de champs et il n'a pas de raccourci pour un nombre fixe de répétitions.
Voici la définition et la docstring du module 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)
Étant donné que les listes sont un type mutable de longueur variable, cela n'a aucun sens d'utiliser une déclaration de type pour spécifier une taille fixe.