Ich bin gespannt, warum in Python ein nachfolgendes Komma in einer Liste eine gültige Syntax ist, und es scheint, dass Python es einfach ignoriert:
>>> ['a','b',]
['a', 'b']
Es macht Sinn, wenn es seitdem ein Tupel ist ('a')
und ('a',)
zwei verschiedene Dinge sind, aber in Listen?
Antworten:
Die Hauptvorteile bestehen darin, dass mehrzeilige Listen einfacher zu bearbeiten sind und die Unordnung bei Unterschieden verringert wird.
Ändern:
zu:
beinhaltet nur eine einzeilige Änderung im Diff:
Dies übertrifft das verwirrendere mehrzeilige Diff, wenn das nachfolgende Komma weggelassen wurde:
Der letztere Unterschied macht es schwieriger zu erkennen, dass nur eine Zeile hinzugefügt wurde und dass die andere Zeile den Inhalt nicht geändert hat.
Dies verringert auch das Risiko:
und Auslösen einer impliziten Verkettung von Zeichenfolgenliteralen , wobei
s = ['manny', 'mo', 'jackroger']
anstelle des beabsichtigten Ergebnisses erzeugt wird.quelle
List = "[" {Item ","} "]".
vs.List = "[" ({Item","}Item|)"]".
"\"item\","
für jedes Element zu drucken, als"\"item\""
für jedes Element, gefolgt von","
allen bis auf das letzte Element.Es ist eine übliche syntaktische Konvention, nachgestellte Kommas in einem Array zuzulassen, Sprachen wie C und Java erlauben dies, und Python scheint diese Konvention für seine Listendatenstruktur übernommen zu haben. Dies ist besonders nützlich, wenn Sie Code zum Auffüllen einer Liste generieren: Generieren Sie einfach eine Folge von Elementen und Kommas. Sie müssen den letzten nicht als Sonderfall betrachten, der am Ende kein Komma enthalten sollte.
quelle
Es hilft, eine bestimmte Art von Fehler zu beseitigen. Es ist manchmal klarer, Listen in mehreren Zeilen zu schreiben. In der späteren Wartung möchten Sie die Elemente möglicherweise neu anordnen.
Wenn Sie jedoch nachgestellte Kommas zulassen und diese verwenden, können Sie die Zeilen problemlos neu anordnen, ohne dass ein Fehler auftritt.
quelle
Ein Tupel ist anders, weil
('a')
es unter Verwendung der impliziten Fortsetzung und()
s als Präzedenzoperator erweitert wird, während es('a',)
sich auf ein Tupel der Länge 1 bezieht.Ihr ursprüngliches Beispiel wäre gewesen
tuple('a')
quelle
('a'),
ist eine Zeichenfolge; Mein Punkt war jedoch, dass nachgestellte Kommas in Tupeln von Bedeutung sind, aber in Listen scheinen sie noch nicht zu sein. Python akzeptiert sie.tuple('a')
ist wahrscheinlich ein schlechtes Beispiel, weil im Allgemeinentuple(x)
und(x,)
nicht das gleiche sind.tuple('ab') != ('ab',)
.tuple('a') == ('a',)
nur weil'a'
ist eine Zeichenfolge der Länge 1.>>> ("a",) == ("a")
Falsch>>> ("ab",) == ("ab")
Falsch>>> ("ab", "bc",) == ("ab", "bc")
WahrDer Hauptgrund ist, Diff weniger kompliziert zu machen. Zum Beispiel haben Sie eine Liste:
und Sie möchten ein weiteres Element hinzufügen. Dann werden Sie am Ende Folgendes tun:
Daher zeigt diff, dass zwei Zeilen geändert wurden, wobei zuerst ',' in Übereinstimmung mit 'c' und 'd' in der letzten Zeile hinzugefügt wurden.
Python erlaubt es also, ',' im letzten Element der Liste zu verfolgen, um zusätzliche Unterschiede zu vermeiden, die Verwirrung stiften können.
quelle