
Les tuples sont des séquences immuables en Python. Soyez prudent lorsque vous créez un tuple avec un élément (tuple à un seul élément) ou un tuple vide.
Cet article décrit le contenu suivant.
- Tuple avec un élément
- Les parenthèses de tuple sont fondamentalement facultatives
- Tuple vide
- Tuples dans les arguments de la fonction
Tuple avec un élément
Lors de la génération d’un tuple avec un élément (tuple à un seul élément), si vous écrivez un seul objet entre parenthèses (), les parenthèses () sont ignorées et ne sont pas traitées comme un tuple.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
Pour générer un tuple avec un élément, une virgule est nécessaire à la fin.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
Par exemple, lors de la connexion de plusieurs tuples avec l’opérateur +, notez qu’une erreur est générée si vous essayez d’ajouter un élément et oubliez une virgule ,.
# 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 de tuple sont fondamentalement facultatives
La raison pour laquelle vous avez besoin d’une virgule pour un tuple avec un élément est que « tuple est un objet délimité par une virgule », et non « un objet entre parenthèses () ».
Notez que c’est en fait la virgule qui fait un tuple, pas les parenthèses. Les parenthèses sont facultatives, sauf dans le cas d’un tuple vide, ou lorsqu’elles sont nécessaires pour éviter toute ambiguïté syntaxique.
Types intégrés – Tuples — documentation Python 3.7.4
C’est un tuple même si les parenthèses () sont omises.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Notez que s’il y a une virgule inutile après l’objet, il sera traité comme un tuple.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Tuple vide
Comme mentionné ci-dessus, les parenthèses () peuvent être omises pour représenter un tuple mais sont nécessaires lors de la création d’un tuple vide.
SyntaxError est levée s’il n’y a qu’un espace ou une virgule ,.
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
Un tuple vide peut également être créé avec tuple() sans argument.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuples dans les arguments de la fonction
S’il y a une ambiguïté syntaxique, les tuples nécessitent des parenthèses ().
Plusieurs arguments sont spécifiés en les séparant par une virgule ,. Si vous souhaitez spécifier un tuple comme argument, des parenthèses () sont nécessaires.
Sans parenthèses (), chaque valeur est passée à chaque argument, et avec des parenthèses (), un tuple est passé à 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 vous ajoutez * au tuple, vous pouvez décompresser le tuple et passer chaque élément à chaque argument.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
Voir l’article suivant pour plus de détails.
