web-dev-qa-db-fra.com

TypeHinting tuples in Python

Quand je veux taper un Tuple dans Python comme:

def func(var: Tuple[int, int]):
    # do something

func((1, 2))    # would be fine
func((1, 2, 3)) # would throw an error

Il est nécessaire de donner le nombre exact d'articles dans le tuple. C'est différent de l'indication de type de liste:

def func(var: list[int]):
    # do something

func([1])       # would be fine
func([1, 2])    # would also be fine
func([1, 2, 3]) # would also be fine

C'est en conséquence, en quelque sorte, à cause du type de tuples. Parce qu'ils sont conçus pour ne pas être modifiés, vous devez coder en dur la quantité d'éléments qu'il contient.

Ma question est donc la suivante: existe-t-il un moyen de rendre flexible le nombre d'éléments dans un indice de type Tuple? J'ai essayé quelque chose comme ça mais ça n'a pas marché:

def func(var: Tuple[*int]):
17
Asara

Oui, vous pouvez rendre flexible le nombre d'éléments dans un indice de type Tuple :

from typing import Tuple

def func(var: Tuple[int, ...]):
    pass

À partir des documents: https://docs.python.org/3/library/typing.html#typing.Tuple

Pour spécifier un tuple de longueur variable de type homogène, utilisez des points de suspension littéraux, par ex. Tuple[int, ...]. Un Tuple simple équivaut à Tuple[Any, ...], puis à son tour sur Tuple.

35
aaron