Viele Programmierer sind bei der ersten Begegnung mit Python sofort von der Bedeutung von Leerzeichen abgeschreckt. Ich habe verschiedene Gründe dafür gehört, dass dies unpraktisch ist, aber ich habe noch nie eine Beschwerde von einem Python-Programmierer gehört.
Natürlich habe ich nicht viele Python-Programmierer getroffen, da ich meine Karriere in der Java-Welt verbracht habe.
Meine Frage richtet sich also an diejenigen unter Ihnen, die an einem großen Python-Projekt teilgenommen haben (mehr als 3 Monate, wobei Python die Hauptsprache ist): Fanden Sie das Whitespace-Problem als unpraktisch und ständig ärgerlich? Oder war es kein Problem, wenn Sie einmal im Fluss waren?
Ich stelle die Frage nicht, weil ich für oder gegen Python oder für oder gegen die Verwendung von Leerzeichen bin. Ich mag Python, aber ich habe es nie für etwas Großes verwendet.
Bitte geben Sie keine Spekulationen an, wenn Sie keine Erfahrung mit Python haben.
quelle
Antworten:
Es gibt nur einen Fall, in dem ich das Leerzeichen als störend empfinde, und zwar beim Ändern des vorhandenen Codes, sodass ein Codeblock mehr oder weniger eingerückt werden muss als zuvor (z. B. Hinzufügen oder Löschen eines
if:
Codes vor dem Code). Wenn Sie in einer Sprache wie C schreiben, fügen Sie einfach dieif
Klammern und ein Paar hinzu und drücken (in Emacs oder einem guten Editor) die Tabulatortaste, damit der Editor die Einrückung automatisch korrigiert. In Python müssen Sie es selbst tun. Natürlich gibt es Editor-Verknüpfungen, um dies selbst zu tun. Es ist also nicht so schlimm, aber der Verlust der Redundanz bedeutet eine leichte zusätzliche Belastung für den Programmierer.Im Großen und Ganzen ist es jedoch ein Gewinn, wenn auch nur verhindert wird, dass die Hälfte meines Bildschirms mit Zeilen wie den folgenden gefüllt wird:
quelle
C-c >
oderC-c <
. Sie müssen es jedoch immer noch selbst tun. Anders ausgedrückt, da Leerzeichen und Codelogik nicht redundant sind, können Sie nicht einfach einen riesigen Block auswählen undM-x indent-region
(oder was auch immer die Version Ihres Editors ist) aufrufen, um alles "richtig" einzurücken.Ich liebe Pythons bedeutendes Leerzeichen. Für mich ist es das perfekte Beispiel für DRY auf syntaktischer Ebene. Die vom Menschen lesbare Methode zum Anzeigen, wo ein Codeblock beginnt und endet, ist das Einrücken. Wenn Sie möchten, dass Ihr Code lesbar ist, müssen Sie ihn unabhängig von der Sprache einrücken. Es ist albern, den Programmierer dazu zu bringen, diese Informationen zweimal anzugeben, einmal für den Compiler / Interpreter und einmal für Menschen. Darüber hinaus ähnelt das Einrücken in C-ähnlichen Sprachen einem Kommentar: Es soll die Verständlichkeit verbessern, aber seine Bedeutung wird vom Compiler / Interpreter nicht erzwungen und kann sehr leicht nicht mehr mit der tatsächlichen Bedeutung (wo sich die geschweiften Klammern befinden) synchronisiert werden. eher verschleiern als klären.
quelle
Signifikante Leerzeichen sind für mich eigentlich praktisch . Es bringt mich dazu, weniger zu tippen. Es formatiert Code ordentlich und ziemlich eindeutig. Dadurch wird der Code lesbarer.
(Aus den gleichen Gründen mag ich auch in Haskell signifikante Leerzeichen.)
quelle
Als ich Python zum ersten Mal verwendete, war das Whitespace-Ding neu und daher eine nervige Einschränkung.
Jetzt merke ich es gar nicht mehr. Ich benutze Python seit 11 Monaten.
quelle
Zunächst einmal - meine Brot- und Buttersprachen sind Python, SQL und Java. Ich liebe Pythons Leerzeichen - es ist weniger Syntax und Typisierung und zwingt die Leute, lesbaren, ordentlich formatierten Code zu schreiben. OTOH, ich hasse die Ausführlichkeit von Java - so sehr, dass ich Python tatsächlich verwende , um alle Boilerplates zu generieren, die ich in Java schreiben muss, was alle meine Java-Mitarbeiter beeindruckt, die von meiner Produktivität erstaunt sind.
Die einzige große Einschränkung ist jedoch das Kopieren / Einfügen von Code aus dem Web - es verursacht häufig gemischte Leerzeichen und Tabulatoren, für deren Bereinigung ein zusätzlicher Schritt erforderlich ist, und ich fange normalerweise erst nach einer Laufzeitausnahme ab.
quelle
highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"
sagen, dass er Tabs als Fehler in der Syntax hervorheben soll - für vim verwende ich in meinem vimrcWenn sich ein Programmierer über die Bedeutung von Leerzeichen ärgert, wird er wahrscheinlich kein Python-Programmierer.
quelle
Ich wette, Sie würden erhebliche Überschneidungen zwischen den Personen finden, die ein Problem mit signifikanten Leerzeichen haben, und denen, die keine Erfahrung mit einem guten Texteditor für Programmierer wie Emacs haben, der die meisten Einrückungen ohne deren Beteiligung handhabt.
Sobald Sie Python verinnerlicht haben, ist dies auf keinen Fall mehr ein Problem. Tatsächlich wird die Prägnanz und der geringe Platzbedarf auf dem Bildschirm zu einem großen Vorteil für die Lesbarkeit. Da ich hauptsächlich Python verwende, finde ich es schwierig, mich in Sprachen zu disziplinieren, in denen es mehr Redundanz gibt (z. B. Java und C #). Das Setzen von Klammern um Code, dessen Einrückung seine Struktur bereits deutlich macht, geht mir auf die Nerven.
quelle
Für die eigentliche Codierung ist dies überhaupt nicht unpraktisch, aber tatsächlich von Vorteil (siehe die Antwort von dsimcha).
Es kann ärgerlich sein, wenn es um Kommunikationstechnologien geht, die führende Leerzeichen nicht berücksichtigen (wie viele nicht programmierorientierte Webforen und auch das Einbetten von Python-Code in eine andere Sprache, wie z. B. HTML-Vorlagensprachen), obwohl ich das als sehe Die redundanten Sprachen, die die Codestruktur zweimal ausdrücken, sind eher ein Fehler in den Tools, die führende Leerzeichen entfernen, als ein Fehler in Python. Sie sind jedoch besser für solche destruktiven Umgebungen geeignet (da Sie den Code in einen Editor einfügen und automatisch einfügen können) reindent basierend auf den expliziten strukturellen Markern oder einfach egal, ob der Code nur ausgeführt und nicht von Menschen gelesen wird).
quelle
Ich finde das Leerzeichen nicht ärgerlich. Ich finde fehlende oder inkonsistente Einrückungen in anderen Sprachen sehr ärgerlich. Ich verstehe, dass dieses Problem eines der Probleme ist, die der Stil lösen soll.
Python ist keine meiner Hauptsprachen.
Ich finde den Umgang mit Tabulatoren und Leerzeichen in Einrückungen gelegentlich ärgerlich. Dies kann zu Problemen führen, wenn Sie Editoren von einer Bearbeitung zu einer anderen wechseln oder wenn Sie Code bearbeiten, den eine andere Person geschrieben hat. Es ist normalerweise trivial zu lösen.
quelle
Ich komme aus einem C # / Javascript / XBase-Hintergrund in keiner bestimmten Reihenfolge, und in meinen Versuchen mit Python ist das für mich überhaupt keine Überlegung. Es ist wie bei Zahnspangen in anderen Sprachen - so funktioniert es, die Dinge so einzufügen, wie es die Regeln sagen, und deine Augen zu trocknen ist meine Einstellung.
quelle