As tuplas cun só elemento en Python requiren unha coma ao final

Negocios

Tuplas, que son obxectos de secuencia inmutables (inmutables) en Python.

Hai que ter coidado ao xerar tuplas cun só elemento ou tuplas baleiras.

Aquí descríbense os seguintes detalles.

  • Tupla con 1 elemento
  • Pódense omitir os corchetes redondos.
  • Tupla baleira
  • Tuplas en argumentos de función

Tupla con 1 elemento

Se tentas xerar unha tupla cun elemento e escribir só un obxecto dentro dos corchetes redondos (), os corchetes redondos () ignoraranse e procesaranse e non se considerarán unha tupla.

single_tuple_error = (0)

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

Requírese unha coma ao final para xerar unha tupla cun elemento.

single_tuple = (0, )

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

Por exemplo, ao usar o operador + para concatenar varias tuplas, teña en conta que se tentas engadir un elemento e esqueces unha coma, obterás un erro.

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

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

Pódense omitir os corchetes redondos.

A razón pola que unha tupla cun elemento necesita unha coma é porque unha tupla non é un valor encerrado entre corchetes () senón un valor separado por coma.

É a coma a que crea a tupla, non os corchetes.
Tuples — Built-in Types — Python 3.10.4 Documentation

Aínda que se omitan os corchetes () , procesarase como unha tupla.

t = 0, 1, 2

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

Teña en conta que unha coma innecesaria despois dun obxecto considérase unha tupla.

t_ = 0,

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

Tupla baleira

Como se mencionou anteriormente, os corchetes () pódense omitir cando se representan unha tupla, pero son necesarios cando se xera unha tupla baleira.

Un espazo ou coma só producirá 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

Tuple() tamén pode xerar tuplas baleiras sen argumentos.

empty_tuple = tuple()

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

Tuplas en argumentos de función

Os corchetes redondos de tuplas () son necesarios aínda que exista unha ambigüidade sintáctica.

Os argumentos da función están separados por comas, pero neste caso, é necesario indicar explícitamente se a función é unha tupla ou non mediante a presenza ou ausencia de corchetes ().

Sen parénteses (), cada valor pásase a cada argumento; con parénteses (), cada valor pásase como unha 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'>

Se a tupla está marcada cun asterisco *, os elementos da tupla pódense ampliar e pasar como argumentos.

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

Para obter máis información, consulte o seguinte artigo.