Tupler med et enkelt element i Python kræver et komma bagved

Forretning

Tupler, som er uforanderlige (uforanderlige) sekvensobjekter i Python.

Man skal være forsigtig, når man genererer tupler med et enkelt element eller tomme tupler.

Følgende oplysninger beskrives her.

  • Tupel med 1 element
  • Tupler i runde parenteser kan udelades.
  • Tomme tupler
  • Tupler i funktionsargumenter

Tupel med 1 element

Hvis du forsøger at generere en tupel med ét element og kun skriver ét objekt inden for de runde parenteser (), vil de runde parenteser () blive ignoreret og behandlet og ikke blive betragtet som en tupel.

single_tuple_error = (0)

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

Der kræves et efterfølgende komma for at generere en tupel med ét element.

single_tuple = (0, )

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

Når du f.eks. bruger operatoren + til at sammenkæde flere tupler, skal du være opmærksom på, at hvis du forsøger at tilføje et element og glemmer et komma, får du en fejl.

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

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

Tupler i runde parenteser kan udelades.

Grunden til, at en tupel med ét element har brug for et komma, er, at en tupel ikke er en værdi, der er omsluttet af runde parenteser (), men en værdi adskilt af et komma.

Det er kommaet, der skaber tuplen, ikke de runde parenteser.
Tuples — Built-in Types — Python 3.10.4 Documentation

Selv om de runde parenteser () er udeladt, behandles den som en tupel.

t = 0, 1, 2

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

Bemærk, at et unødvendigt komma efter et objekt betragtes som en tupel.

t_ = 0,

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

Tomme tupler

Som nævnt ovenfor kan de runde parenteser () udelades, når en tupel repræsenteres, men de er påkrævet, når der genereres en tom tupel.

Et mellemrum eller komma alene vil resultere i en 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

Tomme tupler kan også genereres af tuple() uden argumenter.

empty_tuple = tuple()

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

Tupler i funktionsargumenter

Tupler i runde parenteser () er påkrævet, selv når der er en syntaktisk tvetydighed.

Funktionsargumenter er adskilt af kommaer, men i dette tilfælde er det nødvendigt at angive eksplicit, om funktionen er en tupel eller ej, ved at anføre eller undlade at anføre runde parenteser ().

Uden parenteser () overføres hver værdi til hvert argument; med parenteser () overføres hver værdi som en tupel til et 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'>

Hvis tuplen er markeret med en asterisk *, kan tuplens elementer udvides og overføres som argumenter.

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

Du kan finde flere oplysninger i følgende artikel.