Skip to content

Un tuple avec un seul élément nécessite une virgule en Python

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.