Quelle est la différence d'utiliser List
, Tuple
, etc. à partir du module typing
:
from typing import Tuple
def f(points: Tuple):
return map(do_stuff, points)
Au lieu de se référer directement aux types de Python:
def f(points: Tuple):
return map(do_stuff, points)
Et quand dois-je utiliser l'un sur l'autre?
typing.Tuple
et typing.List
sont ( Types génériques ; cela signifie que vous pouvez spécifier de quel type leur contenu doit être:
def f(points: Tuple[float, float]):
return map(do_stuff, points)
Ceci spécifie que le Tuple transmis doit contenir deux valeurs float
. Vous ne pouvez pas faire cela avec le type Tuple
intégré.
typing.Tuple
est spécial ici car il vous permet de spécifier un nombre spécifique d'éléments attendus et le type de chaque position. Utilisez des points de suspension si la longueur n'est pas définie et que le type doit être répété: Tuple[float, ...]
décrit une longueur variable Tuple
avec float
s.
Pour typing.List
et d'autres types de séquence, vous ne spécifiez généralement que le type de tous les éléments; List[str]
est une liste de chaînes, de n'importe quelle taille. Notez que les fonctions doivent préférentiellement prendre typing.Sequence
comme arguments et typing.List
n'est généralement utilisé que pour les types de retour; de manière générale, la plupart des fonctions prennent n'importe quelle séquence et ne font qu'itérer, mais lorsque vous retournez un list
, vous renvoyez vraiment un type de séquence spécifique et modifiable.
Vous devez toujours choisir les génériques typing
même si vous ne restreignez pas actuellement le contenu. Il est plus facile d'ajouter cette contrainte ultérieurement avec un type générique car le changement résultant sera plus petit.