Tupel mit einem einzigen Element erfordern in Python ein Komma am Ende

Geschäft

Tupel, die in Python unveränderliche (unveränderliche) Sequenzobjekte sind.

Vorsicht ist geboten, wenn Tupel mit einem einzigen Element oder leere Tupel erzeugt werden.

Die folgenden Details werden hier beschrieben.

  • Tupel mit 1 Element
  • Die runden Klammern der Tupel können weggelassen werden.
  • Leeres Tupel
  • Tupel in Funktionsargumenten

Tupel mit 1 Element

Wenn Sie versuchen, ein Tupel mit einem Element zu erzeugen und nur ein Objekt in die runden Klammern () schreiben, werden die runden Klammern () ignoriert und nicht als Tupel verarbeitet.

single_tuple_error = (0)

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

Ein nachgestelltes Komma ist erforderlich, um ein Tupel mit einem Element zu erzeugen.

single_tuple = (0, )

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

Wenn Sie zum Beispiel den Operator + verwenden, um mehrere Tupel zu verketten, beachten Sie, dass Sie einen Fehler erhalten, wenn Sie versuchen, ein Element hinzuzufügen und ein Komma vergessen.

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

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

Die runden Klammern der Tupel können weggelassen werden.

Der Grund, warum ein Tupel mit einem Element ein Komma braucht, liegt darin, dass ein Tupel nicht ein in runden Klammern () eingeschlossener Wert ist, sondern ein durch ein Komma getrennter Wert.

Es ist das Komma, das das Tupel bildet, nicht die runden Klammern.
Tuples — Built-in Types — Python 3.10.4 Documentation

Auch wenn die runden Klammern () weggelassen werden, wird es als Tupel verarbeitet.

t = 0, 1, 2

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

Beachten Sie, dass ein unnötiges Komma nach einem Objekt als Tupel betrachtet wird.

t_ = 0,

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

Leeres Tupel

Wie bereits erwähnt, können die runden Klammern () bei der Darstellung eines Tupels weggelassen werden, sind aber bei der Erzeugung eines leeren Tupels erforderlich.

Ein Leerzeichen oder Komma allein führt zu einem SyntaxFehler.

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

Leere Tupel können auch mit tuple() ohne Argumente erzeugt werden.

empty_tuple = tuple()

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

Tupel in Funktionsargumenten

Runde Tupel-Klammern () sind auch dann erforderlich, wenn eine syntaktische Zweideutigkeit vorliegt.

Funktionsargumente werden durch Kommas getrennt, aber in diesem Fall muss explizit angegeben werden, ob die Funktion ein Tupel ist oder nicht, indem runde Klammern () gesetzt werden oder nicht.

Ohne Klammern () wird jeder Wert an jedes Argument übergeben; mit Klammern () wird jeder Wert als Tupel an ein Argument übergeben.

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'>

Wenn das Tupel mit einem Sternchen * gekennzeichnet ist, können die Elemente des Tupels expandiert und als Argumente übergeben werden.

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

Weitere Informationen finden Sie in dem folgenden Artikel.