Tuplurile cu un singur element în Python necesită o virgulă la sfârșit

Afaceri

Tuples, care sunt obiecte secvență imuabile (neschimbabile) în Python.

Trebuie să se acorde atenție atunci când se generează tuple cu un singur element sau tuple goale.

Aici sunt descrise următoarele detalii.

  • Tuple cu 1 element
  • Parantezele rotunde ale tuplelor pot fi omise.
  • Tuple gol
  • Tupluri în argumentele funcțiilor

Tuple cu 1 element

Dacă încercați să generați un tuple cu un singur element și scrieți un singur obiect în interiorul parantezelor rotunde (), parantezele rotunde () vor fi ignorate și procesate și nu vor fi considerate un tuple.

single_tuple_error = (0)

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

Este necesară o virgulă la sfârșit pentru a genera un tuple cu un singur element.

single_tuple = (0, )

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

De exemplu, atunci când utilizați operatorul + pentru a concatena mai multe tupluri, rețineți că, dacă încercați să adăugați un element și uitați o virgulă, veți primi o eroare.

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

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

Parantezele rotunde ale tuplelor pot fi omise.

Motivul pentru care un tuple cu un singur element are nevoie de virgulă este acela că un tuple nu este o valoare închisă între paranteze rotunde (), ci o valoare separată prin virgulă.

Virgula este cea care creează tupla, nu parantezele rotunde.
Tuples — Built-in Types — Python 3.10.4 Documentation

Chiar dacă parantezele rotunde () sunt omise, acesta este procesat ca un tupluplu.

t = 0, 1, 2

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

Rețineți că o virgulă inutilă după un obiect este considerată un tupluplu.

t_ = 0,

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

Tuple gol

După cum s-a menționat mai sus, parantezele rotunde () pot fi omise atunci când se reprezintă un tupluplu, dar sunt necesare atunci când se generează un tuplu gol.

Un spațiu sau o virgulă va genera o eroare de sintaxă (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

Tuplurile goale pot fi, de asemenea, generate de tuple() fără argumente.

empty_tuple = tuple()

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

Tupluri în argumentele funcțiilor

Parantezele rotunde () sunt obligatorii chiar și atunci când există o ambiguitate sintactică.

Argumentele funcțiilor sunt separate prin virgule, dar în acest caz este necesar să se indice în mod explicit dacă funcția este sau nu un tupluplu prin prezența sau absența parantezelor rotunde ().

Fără paranteze (), fiecare valoare este transmisă fiecărui argument; cu paranteze (), fiecare valoare este transmisă ca un tupluș la un singur 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'>

În cazul în care tupla este marcată cu un asterisc *, elementele tuplei pot fi dezvoltate și transmise ca argumente.

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

Pentru mai multe informații, consultați următorul articol.

Copied title and URL