Warum ist es gültig, eine leere Liste, aber kein leeres Tupel zuzuweisen?
Dies kam in eine aktuelle PyCon Diskussion.
Die Aussag
[] = []
hat keine Bedeutung, löst aber auch keine Ausnahme aus. Ich habe das Gefühl, dass dies an den Auspackregeln liegen muss. Du kannst tuntuple auspacken auch mit Listen, z. B.
[a, b] = [1, 2]
tut was Sie erwarten würden. Als logische Konsequenz sollte dies auch funktionieren, wenn die Anzahl der zu entpackenden Elemente 0 ist, was erklären würde, warum die Zuweisung zu einer leeren Liste gültig ist. Diese Theorie wird auch dadurch gestützt, was passiert, wenn Sie versuchen, einer leeren Liste eine nicht leere Liste zuzuweisen:
>>> [] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Ich würde mich über diese Erklärung freuen, wenn dies auch für Tupel gelten würde. Wenn wir in eine Liste mit 0 Elementen entpacken können, sollten wir auch in ein Tupel mit 0 Elementen entpacken können, nicht wahr? Jedoch
>>> () = ()
File "<stdin>", line 1
SyntaxError: can't assign to ()
Es scheint, als würden Entpackungsregeln nicht für Tupel angewendet, wie sie für Listen gelten. Ich kann mir keine Erklärung für diese Inkonsistenz vorstellen. Gibt es einen Grund für dieses Verhalten?