Les tuples, qui sont des objets séquentiels immuables (non modifiables) en Python.
Il faut faire attention lors de la génération de tuples avec un seul élément ou de tuples vides.
Les détails suivants sont décrits ici.
- Tuple avec 1 élément
- Les parenthèses rondes des tuple peuvent être omises.
- Tuple vide
- Tuples dans les arguments de fonction
Tuple avec 1 élément
Si vous essayez de générer un tuple avec un élément et n'écrivez qu'un seul objet à l'intérieur des crochets (), les crochets () seront ignorés et traités et ne seront pas considérés comme un tuple.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Une virgule de fin est nécessaire pour générer un tuple à un élément.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Par exemple, lorsque vous utilisez l'opérateur + pour concaténer plusieurs tuples, notez que si vous essayez d'ajouter un élément et que vous oubliez une virgule, vous obtiendrez une erreur.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
Les parenthèses rondes des tuple peuvent être omises.
La raison pour laquelle un tuple avec un élément nécessite une virgule est qu'un tuple n'est pas une valeur entre crochets () mais une valeur séparée par une virgule.
C'est la virgule qui crée le tuple, pas les parenthèses.
Tuples — Built-in Types — Python 3.10.4 Documentation
Même si les parenthèses rondes () sont omises, il est traité comme un tuple.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Notez qu'une virgule inutile après un objet est considérée comme un tuple.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Tuple vide
Comme mentionné ci-dessus, les crochets () peuvent être omis lors de la représentation d'un tuple, mais sont obligatoires lors de la génération d'un tuple vide.
Une espace ou une virgule seule entraînera une SyntaxError.
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
# empty_tuple_error =
# SyntaxError: invalid syntax
# empty_tuple_error = ,
# SyntaxError: invalid syntax
# empty_tuple_error = (,)
# SyntaxError: invalid syntax
Les tuples vides peuvent également être générés par tuple() sans arguments.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuples dans les arguments de fonction
Les parenthèses rondes () sont obligatoires même en cas d'ambiguïté syntaxique.
Les arguments des fonctions sont séparés par des virgules, mais dans ce cas, il est nécessaire d'indiquer explicitement si la fonction est un tuple ou non par la présence ou l'absence de parenthèses rondes ().
Sans les parenthèses (), chaque valeur est passée à chaque argument ; avec les parenthèses (), chaque valeur est passée comme un tuple à un argument.
def example(a, b):
print(a, type(a))
print(b, type(b))
example(0, 1)
# 0 <class 'int'>
# 1 <class 'int'>
# example((0, 1))
# TypeError: example() missing 1 required positional argument: 'b'
example((0, 1), 2)
# (0, 1) <class 'tuple'>
# 2 <class 'int'>
Si le tuple est marqué d'un astérisque *, les éléments du tuple peuvent être développés et passés comme arguments.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Pour plus d'informations, voir l'article suivant.