Bei einem einzelnen Elementtupel ist das nachfolgende Komma erforderlich.
a = ('foo',)
Was ist mit einem Tupel mit mehreren Elementen? Unabhängig davon, ob das nachfolgende Komma vorhanden ist oder nicht, sind beide gültig. Ist das richtig? Ein nachfolgendes Komma zu haben ist meiner Meinung nach einfacher zu bearbeiten. Ist das ein schlechter Codierungsstil?
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
Antworten:
In allen Fällen außer dem leeren Tupel ist das Komma das Wichtigste. Klammern sind nur erforderlich, wenn sie aus anderen syntaktischen Gründen erforderlich sind: um ein Tupel von einer Reihe von Funktionsargumenten zu unterscheiden, Operator-Priorität zu haben oder Zeilenumbrüche zuzulassen.
Das nachfolgende Komma für Tupel, Listen oder Funktionsargumente ist ein guter Stil, insbesondere wenn Sie eine lange Initialisierung haben, die über mehrere Zeilen verteilt ist. Wenn Sie immer ein nachfolgendes Komma einfügen, fügen Sie am Ende keine weitere Zeile hinzu, da Sie ein weiteres Element hinzufügen und stattdessen nur einen gültigen Ausdruck erstellen:
Angenommen, dies begann als 2-Elemente-Liste, die später erweitert wurde, ist auf möglicherweise nicht sofort offensichtliche Weise ein Fehler aufgetreten. Fügen Sie immer das nachfolgende Komma ein, und Sie vermeiden diese Falle.
quelle
Es ist nur erforderlich, dass Tupel mit einem Element die Definition eines Tupels oder eines Ausdrucks in Klammern eindeutig definieren.
Für mehr als einen Artikel ist dies nicht mehr erforderlich, da klar ist, dass es sich um ein Tupel handelt. Das nachfolgende Komma erleichtert jedoch die Definition in mehreren Zeilen. Sie können Elemente am Ende hinzufügen oder neu anordnen, ohne die Syntax zu beschädigen, da Sie bei einem Unfall ein Komma weggelassen haben.
z.B,
Beachten Sie, dass dies auch für andere Sammlungen (z. B. Listen und Wörterbücher) gilt und nicht nur für Tupel.
quelle
key: value,
pro Zeile zu haben, und achten Sie beim Hinzufügen neuer Inhalte nicht auf Kommas.Ein weiterer Vorteil von nachgestellten Kommas besteht darin, dass Unterschiede besser aussehen. Wenn Sie mit angefangen haben
und änderte es zu
Der Diff würde so aussehen
Wenn Sie mit einem nachgestellten Komma begonnen hätten, wie z
Dann wäre der Unterschied einfach
quelle
Es ist optional: siehe Python-Wiki .
Zusammenfassung: Einzelelement-Tupel benötigen ein nachfolgendes Komma , sind jedoch für Mehrelement-Tupel optional .
quelle
Berücksichtigen Sie auch die Situation, in der Sie möchten:
In diesem Fall sind die äußeren Klammern nichts anderes als das Gruppieren von Klammern. Um sie zu tupeln, müssen Sie ein nachfolgendes Komma hinzufügen. dh
quelle
Nachfolgendes Komma ist nur für Tupel mit einem Element erforderlich. Ein nachkommendes Komma für größere Tupel ist eine Frage des Stils und nicht erforderlich. Der größte Vorteil ist der saubere Unterschied bei Dateien mit mehrzeiligen großen Tupeln, die häufig geändert werden (z. B. Konfigurationstupel).
quelle
Das ist eine einfache Antwort.
a = ("s") ist eine Zeichenfolge
und
a = ("s",) ist ein Tupel mit einem Element.
Python benötigt ein zusätzliches Komma, wenn ein Element Tupel enthält, um zwischen String und Tupel zu unterscheiden.
Versuchen Sie dies beispielsweise auf der Python-Konsole:
a = ("s")
a = a + (1,2,3)
Traceback (letzter Anruf zuletzt):
Datei stdin, Zeile 1, im Modul
TypeError: Objekte 'str' und 'tuple' können nicht verkettet werden
quelle
Ein weiterer Grund dafür ist, dass die Codegenerierung und die
__repr__
Funktionen einfacher zu schreiben sind. Wenn Sie beispielsweise ein Objekt haben, das so aufgebaut istobj(arg1, arg2, ..., argn)
, können Sie einfachobj.__repr__
als schreibenWenn ein nachfolgendes Komma nicht erlaubt wäre, müssten Sie das letzte Argument als Sonderfall angeben. Tatsächlich könnten Sie das Obige mit einem Listenverständnis in eine Zeile schreiben (ich habe es länger geschrieben, um das Lesen zu erleichtern). Das wäre nicht so einfach, wenn Sie in der letzten Amtszeit einen Sonderfall hätten.
quelle
join
in diesem Fall verwenden :def __repr__(self): 'obj(' + ', '.join([repr(arg) for arg in obj.args]) + ')'
.join
.PEP 8 - Style Guide für Python-Code - Verwendung von nachgestellten Kommas
Nachgestellte Kommas sind normalerweise optional, außer sie sind obligatorisch, wenn ein Tupel aus einem Element erstellt wird (und in Python 2 haben sie eine Semantik für die print-Anweisung). Aus Gründen der Übersichtlichkeit wird empfohlen, letztere in (technisch redundante) Klammern zu setzen.
Ja:
OK, aber verwirrend:
Wenn nachfolgende Kommas redundant sind, sind sie häufig hilfreich, wenn ein Versionskontrollsystem verwendet wird und wenn erwartet wird, dass eine Liste von Werten, Argumenten oder importierten Elementen im Laufe der Zeit erweitert wird. Das Muster besteht darin, jeden Wert (usw.) für sich in eine Zeile zu setzen, wobei immer ein nachfolgendes Komma hinzugefügt wird, und in der nächsten Zeile die enge Klammer / Klammer / Klammer hinzuzufügen. Es ist jedoch nicht sinnvoll, ein abschließendes Komma in derselben Zeile wie das schließende Trennzeichen zu haben (außer im obigen Fall von Singleton-Tupeln).
Ja:
Nein:
quelle
Der Codierungsstil ist Ihr Geschmack. Wenn Sie der Meinung sind, dass der Codierungsstandard wichtig ist, gibt es einen PEP-8 , der Sie leiten kann.
Was halten Sie vom Ergebnis des folgenden Ausdrucks?
Ja, x ist nur eine Zahl.
quelle