Tupler med ett enda element i Python kräver ett avslutande kommatecken.

Företag

Tupler, som är oföränderliga sekvensobjekt i Python.

Man måste vara försiktig när man skapar tupler med ett enda element eller tomma tupler.

Här beskrivs följande detaljer.

  • Tupel med 1 element
  • Tupelrundparenteser kan utelämnas.
  • Tom tupel
  • Tupler i funktionsargument

Tupel med 1 element

Om du försöker skapa en tupel med ett element och skriver endast ett objekt inom de runda parenteserna () kommer de runda parenteserna () att ignoreras och behandlas och inte betraktas som en tupel.

single_tuple_error = (0)

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

Ett avslutande kommatecken krävs för att generera en tupel med ett element.

single_tuple = (0, )

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

När du till exempel använder operatören + för att sammanfoga flera tupler ska du notera att om du försöker lägga till ett element och glömmer ett kommatecken får du ett felmeddelande.

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

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

Tupelrundparenteser kan utelämnas.

Anledningen till att en tupel med ett element behöver ett kommatecken är att en tupel inte är ett värde inom runda parenteser () utan ett värde separerat med ett kommatecken.

Det är kommandot som skapar tupeln, inte de runda parenteserna.
Tuples — Built-in Types — Python 3.10.4 Documentation

Även om de runda parenteserna () utelämnas behandlas det som en tupel.

t = 0, 1, 2

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

Observera att ett onödigt kommatecken efter ett objekt betraktas som en tupel.

t_ = 0,

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

Tom tupel

Som nämnts ovan kan de runda parenteserna () utelämnas när en tupel representeras, men de krävs när en tom tupel genereras.

Ett mellanslag eller ett kommatecken i sig ger upphov till ett 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

Tomma tupler kan också genereras av tuple() utan argument.

empty_tuple = tuple()

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

Tupler i funktionsargument

Tupelformade runda parenteser () krävs även när det finns en syntaktisk tvetydighet.

Funktionsargument separeras med kommatecken, men i det här fallet är det nödvändigt att uttryckligen ange om funktionen är en tupel eller inte genom att ange om det finns runda parenteser () eller inte.

Utan parenteser () skickas varje värde till varje argument; med parenteser () skickas varje värde som en tupel till ett 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'>

Om tupeln är markerad med en asterisk * kan tupelns element expanderas och skickas som argument.

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

Mer information finns i följande artikel.