Skip to content

Ein Tupel mit einem Element erfordert in Python ein Komma

Python

Tupel sind unveränderliche Sequenzen in Python. Seien Sie vorsichtig, wenn Sie ein Tupel mit einem Element (Einzelelement-Tupel) oder ein leeres Tupel erstellen.

Dieser Artikel hat folgenden Inhalt.

  • Tupel mit einem Element
  • Tupelklammern sind grundsätzlich optional
  • Leeres Tupel
  • Tupel in Funktionsargumenten

Tupel mit einem Element

Wenn Sie beim Generieren eines Tupels mit einem Element (Einzelelement-Tupel) nur ein Objekt in Klammern () schreiben, werden die Klammern () ignoriert und nicht als Tupel behandelt.

single_tuple_error = (0)

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

Um ein Tupel mit einem Element zu erzeugen, wird am Ende ein Komma benötigt.

single_tuple = (0, )

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

Wenn Sie beispielsweise mehrere Tupel mit dem +-Operator beachten, dass ein Fehler ausgelöst wird, 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)

Tupelklammern sind grundsätzlich optional

Der Grund, warum SIE ein Komma für ein Tupel mit einem Element benötigen, ist, dass „Tupel ein durch Komma getrenntes Objekt ist“ und nicht „ein in Klammern eingeschlossenes Objekt ()“.

Beachten Sie, dass es eigentlich das Komma ist, das ein Tupel ergibt, nicht die Klammern. Die Klammern sind optional, außer im leeren Tupelfall oder wenn sie benötigt werden, um syntaktische Mehrdeutigkeit zu vermeiden.
Eingebaute Typen – Tupel – Dokumentation zu Python 3.7.4

Es ist ein Tupel, auch wenn die Klammern () weggelassen werden.

t = 0, 1, 2

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

Beachten Sie, dass ein unnötiges Komma nach dem Objekt als Tupel behandelt WIRD.

t_ = 0,

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

Leeres Tupel

Wie oben erwähnt, can Klammern () weggelassen Werden, um ein Tupel darzustellen, sie sind jedoch erforderlich, WENN ein leeres Tupel erstellt WIRD.

SyntaxError wird ausgelöst, wenn nur ein Leerzeichen oder ein Komma vorhanden ist.

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

Ein leeres Tupel kann auch ohne Argument mit tuple() erzeugt werden.

empty_tuple = tuple()

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

Tupel in Funktionsargumenten

Wenn es eine syntaktische Mehrdeutigkeit gibt, verlangt Tupel Klammern ().

Mehrere Argumente werden angegeben, indem sie durch ein Komma getrennt werden. Wenn SIE ein Tupel als ein Argument angeben möchten, sind Klammern () erforderlich.

Ohne Klammern () wird jeder Wert an jedes Argument übergeben, und mit Klammern () wird ein 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 Sie dem Tupel * hinzufügen, können Sie das Tupel entpacken und jedes Element an jedes Argument übergeben.

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

Nichts finden Sie im folgenden Artikel.