En Python, les tuples ne comportant qu’un seul élément doivent être suivis d’une virgule.

Affaires

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.