Les tuples amb un sol element a Python requereixen una coma al final

Negocis

Tuples, que són objectes de seqüència immutables (incanviables) a Python.

Cal tenir cura en generar tuples amb un sol element o tuples buides.

Els detalls següents es descriuen aquí.

  • Tupla amb 1 element
  • Els claudàtors rodons de tuple es poden ometre.
  • Tupla buida
  • Tuples en arguments de funció

Tupla amb 1 element

Si intenteu generar una tupla amb un element i escriure només un objecte dins dels claudàtors rodons (), els claudàtors rodons () s’ignoraran i es processaran i no es consideraran una tupla.

single_tuple_error = (0)

print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>

Es requereix una coma al final per generar una tupla amb un element.

single_tuple = (0, )

print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>

Per exemple, quan utilitzeu l’operador + per concatenar diverses tuples, tingueu en compte que si intenteu afegir un element i oblideu una coma, obtindreu un error.

# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple

print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)

Els claudàtors rodons de tuple es poden ometre.

La raó per la qual una tupla amb un element necessita una coma és perquè una tupla no és un valor tancat entre claudàtors () sinó un valor separat per una coma.

És la coma la que crea la tupla, no els claudàtors.
Tuples — Built-in Types — Python 3.10.4 Documentation

Fins i tot si s’ometen els claudàtors () es processa com una tupla.

t = 0, 1, 2

print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>

Tingueu en compte que una coma innecessària després d’un objecte es considera una tupla.

t_ = 0,

print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>

Tupla buida

Com s’ha esmentat anteriorment, els claudàtors () es poden ometre quan representen una tupla, però són necessaris quan es genera una tupla buida.

Un espai o una coma només donarà lloc a un error de sintaxi.

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

Tuple() també pot generar tuples buides sense arguments.

empty_tuple = tuple()

print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>

Tuples en arguments de funció

Els claudàtors () són necessaris fins i tot quan hi ha una ambigüitat sintàctica.

Els arguments de funció estan separats per comes, però en aquest cas, cal indicar explícitament si la funció és una tupla o no mitjançant la presència o absència de claudàtors ().

Sense parèntesis (), cada valor es passa a cada argument; amb parèntesis (), cada valor es passa com a tupla a 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 la tupla està marcada amb un asterisc *, els elements de la tupla es poden expandir i passar com a arguments.

example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>

Per obtenir més informació, consulteu l’article següent.