Las tuplas con un solo elemento en Python requieren una coma final

Negocio

Las tuplas, que son objetos secuenciales inmutables (inalterables) en Python.

Hay que tener cuidado al generar tuplas con un solo elemento o tuplas vacías.

Aquí se describen los siguientes detalles.

  • Tuple con 1 elemento
  • Se pueden omitir los corchetes de las tuplas.
  • Tuple vacía
  • Tuplas en los argumentos de las funciones

Tuple con 1 elemento

Si intentas generar una tupla con un elemento y escribes sólo un objeto dentro de los corchetes (), los corchetes () serán ignorados y procesados y no se considerará una tupla.

single_tuple_error = (0)

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

Se requiere una coma final para generar una tupla con un elemento.

single_tuple = (0, )

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

Por ejemplo, al utilizar el operador + para concatenar varias tuplas, tenga en cuenta que si intenta añadir un elemento y se olvida de una coma, obtendrá 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)

Se pueden omitir los corchetes de las tuplas.

La razón por la que una tupla con un elemento necesita una coma es porque una tupla no es un valor encerrado entre corchetes () sino un valor separado por una coma.

Es la coma la que crea la tupla, no los corchetes.
Tuples — Built-in Types — Python 3.10.4 Documentation

Aunque se omitan los corchetes (), se procesa como una tupla.

t = 0, 1, 2

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

Tenga en cuenta que una coma innecesaria después de un objeto se considera una tupla.

t_ = 0,

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

Tuple vacía

Como se ha mencionado anteriormente, los corchetes () pueden omitirse cuando se representa una tupla, pero son necesarios cuando se genera una tupla vacía.

Un espacio o una coma por sí solos darán lugar a un 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

Las tuplas vacías también pueden ser generadas por tuple() sin argumentos.

empty_tuple = tuple()

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

Tuplas en los argumentos de las funciones

Los corchetes de la tupla () son necesarios incluso cuando hay una ambigüedad sintáctica.

Los argumentos de las funciones están separados por comas, pero en este caso es necesario indicar explícitamente si la función es una tupla o no mediante la presencia o ausencia de corchetes ().

Sin paréntesis (), cada valor se pasa a cada argumento; con paréntesis (), cada valor se pasa como una tupla a un argumento.

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 con un asterisco *, los elementos de la tupla se pueden expandir y pasar como argumentos.

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

Para más información, consulte el siguiente artículo.

Copied title and URL