Ist dies nicht mit der Empfehlung von Leerzeichen um jedes andere Vorkommen =
in Python-Code vereinbar?
Wie ist:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
besser als:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
Alle Links zu Diskussionen / Erklärungen durch Pythons BDFL sind willkommen.
Beachten Sie, dass es bei dieser Frage mehr um kwargs als um Standardwerte geht. Ich habe nur die Formulierung aus PEP 8 verwendet.
Ich bitte nicht um Meinungen. Ich frage nach Gründen für diese Entscheidung. Es ist eher so, als würde man fragen, warum ich {
in derselben Zeile wie die if
Anweisung in einem C-Programm verwenden soll, nicht, ob ich sie verwenden soll oder nicht.
quelle
{
eine neue Zeile einzufügenif
(speichert die gleiche Anzahl von Zeichen), aber nicht in der Klassendefinition. Auch ein Schlüsselwortparameter unterscheidet sich vom Standardwert, verwendet jedoch immer noch dieselbe Stilempfehlung.kw1 = kw1, kw2 = kw2
;), aber vielleicht dachten Guido und Barry das.Ich würde very_long_variable_name nicht als Standardargument verwenden. Bedenken Sie also Folgendes:
darüber:
Es ist auch wenig sinnvoll, Variablen als Standardwerte zu verwenden. Vielleicht einige konstante Variablen (die nicht wirklich Konstanten sind) und in diesem Fall würde ich Namen verwenden, die alle Großbuchstaben sind, beschreibend und doch so kurz wie möglich. Also kein anderer_sehr _...
quelle
Es gibt Vor- und Nachteile.
Ich mag es nicht, wie PEP8-kompatibler Code gelesen wird. Ich mag das Argument nicht,
very_long_variable_name=another_very_long_variable_name
das jemals menschlicher lesbar sein kann alsvery_long_variable_name = another_very_long_variable_name
. So lesen die Leute nicht. Dies ist eine zusätzliche kognitive Belastung, insbesondere wenn keine Syntaxhervorhebung erfolgt.Es gibt jedoch einen signifikanten Vorteil. Wenn die Abstandsregeln eingehalten werden, wird die Suche nach Parametern ausschließlich mit Werkzeugen wesentlich effektiver.
quelle
IMO, das die Leerzeichen für Argumente weglässt, sorgt für eine sauberere visuelle Gruppierung der Argumente / Wert-Paare. es sieht weniger überladen aus.
quelle
arg1=40
ist besser lesbar, da die Beziehung offensichtlicher ist.Ich denke, es gibt mehrere Gründe dafür, obwohl ich vielleicht nur rationalisiere:
a == b
die auch gültige Ausdrücke innerhalb eines Aufrufs sein können.quelle
Für mich macht es Code lesbarer und ist daher eine gute Konvention.
Ich denke, der wesentliche Unterschied in Bezug auf den Stil zwischen Variablenzuweisungen und Funktionsschlüsselwortzuweisungen besteht darin, dass
=
für die erstere nur eine einzige in einer Zeile stehen sollte, während=
für die letztere im Allgemeinen mehrere s in einer Zeile stehen.Wenn es keine anderen Überlegungen waren, würden wir es vorziehen
foo = 42
zufoo=42
, weil dieser nicht, wie Gleichheitszeichen sind in der Regel formatiert ist , und weil die ehemalige schön trennt visuell die Variable und Wert mit Leerzeichen.Aber wenn es mehrere Zuordnungen sind auf einer Linie, ziehen wir
f(foo=42, bar=43, baz=44)
anf(foo = 42, bar = 43, baz = 44)
, weil erstere visuell trennt die verschiedenen Zuordnungen mit Leerzeichen, während letzteres nicht der Fall ist, ist es ein bisschen schwerer zu machen , um zu sehen , wo die Schlüsselwort / Wert - Paare sind.Hier ist eine andere Art, es auszudrücken: Es gibt eine Konsistenz hinter der Konvention. Diese Konsistenz ist folgende: Die "höchste Trennungsstufe" wird über Räume visuell klarer. Niedrigere Trennstufen sind dies nicht (da dies mit dem Leerzeichen verwechselt werden würde, das die höhere Stufe trennt). Bei der Variablenzuweisung liegt die höchste Trennungsstufe zwischen Variable und Wert. Bei der Zuweisung von Funktionsschlüsselwörtern liegt die höchste Trennungsstufe zwischen den einzelnen Zuweisungen selbst.
quelle