webentwicklung-frage-antwort-db.com.de

Was ist der Zweck des Doppelpunkts vor einem Block in Python?

Was ist der Zweck des Doppelpunkts vor einem Block in Python?

Beispiel:

if n == 0:
    print "The end"
65
Joshua Swink

Der Doppelpunkt gibt den Beginn eines eingerückten Blocks an.

Technisch ist es nicht notwendig; Sie können einfach ein- und ausrücken, wenn der Block abgeschlossen ist. Basierend auf dem Python koan "explizite ist besser als implizit" (EIBTI), glaube ich, dass Guido den Doppelpunkt absichtlich obligatorisch gemacht hat, so dass any Aussage, dass sollte sein sollte gefolgt von eingerücktem Code endet in einem Doppelpunkt. (Es erlaubt auch Einzeiler, wenn Sie nach dem Doppelpunkt fortfahren, dieser Stil ist jedoch nicht weit verbreitet.)

Es erleichtert auch die Arbeit von Syntax-fähigen Editoren für das automatische Einrücken, die ebenfalls in die Entscheidung einbezogen wurden.


Diese Frage stellt sich als ein Python FAQ heraus, und ich habe eine der Antworten von Guido hier gefunden:

Warum sind Doppelpunkte für die if/while/def/class -Anweisungen erforderlich?

Der Doppelpunkt ist in erster Linie erforderlich, um die Lesbarkeit zu verbessern (eines der Ergebnisse der experimentellen ABC-Sprache). Bedenken Sie:

if a == b 
    print a

gegen 

if a == b: 
    print a

Beachten Sie, dass der zweite etwas lesbarer ist. Beachten Sie weiter, wie ein Doppelpunkt das Beispiel in dieser FAQ -Antwort hervorhebt; Es ist eine Standardanwendung in Englisch.

Ein weiterer kleiner Grund ist, dass der Doppelpunkt es für Editoren mit Syntaxhervorhebung einfacher macht. Sie können nach Doppelpunkten suchen, um zu entscheiden, wann die Einrückung erhöht werden muss, anstatt den Programmtext ausführlicher analysieren zu müssen.

71
tzot

Betrachten Sie die folgende Liste der in Pewprikanese geschriebenen Dinge, die Sie im Supermarkt kaufen können.

pewkah
lalala
    chunkykachoo
    pewpewpew
skunkybacon

Wenn ich das lese, bin ich verwirrt. Sind Chunkykachoo und Pewpewpew eine Art Lalala? Oder was ist, wenn chunkykachoo und pewpewpew nur deshalb eingerückt werden, weil sie besondere Gegenstände sind?

Nun sehen Sie, was passiert, wenn mein pewprikanesischer Freund einen Doppelpunkt hinzufügt, um mir zu helfen, die Liste besser zu analysieren: (<- so)

pewkah
lalala:   (<-- see this colon)
    chunkykachoo
    pewpewpew
skunkybacon

Jetzt ist klar, dass Chunkykachoo und Pewpewpew eine Art Lalala sind.

Nehmen wir an, es gibt eine Person, die anfängt, Python zu lernen, was ihre erste Programmiersprache ist. Ohne Doppelpunkte gibt es eine beträchtliche Wahrscheinlichkeit, dass sie weiter denken wird, "diese Zeilen sind eingerückt, weil diese Zeilen wie spezielle Elemente sind", und es kann eine Weile dauern, bis Sie erkennen, dass dies nicht der beste Weg ist, über den Einzug nachzudenken.

23
Yoo

Drei Gründe:

  1. Lesbarkeit erhöhen. Der Doppelpunkt hilft dem Code, in den folgenden eingerückten Block zu fließen.
  2. Um Texteditoren/IDEs zu unterstützen, können sie die nächste Zeile automatisch einrücken, wenn die vorherige Zeile mit einem Doppelpunkt endet.
  3. Um das Parsen mit Python etwas einfacher zu machen.
15
Ryan

Soweit ich weiß, ist es ein vorsätzliches Design, um es deutlicher zu machen, dass der Leser nach dem Doppelpunkt eine Vertiefung erwarten sollte.

Es ermöglicht auch solche Konstrukte:

if expression: action()
code_continues()

Beachten Sie (als Kommentator), dass dies nicht gerade der glänzende Goldstandard des guten Python-Stils ist. Es wäre viel besser, dort ein Leerzeichen zu haben:

if expression: action()

code_continues()

um Verwirrung zu vermeiden. Ich wollte mit dem ersten Beispiel nur klarstellen, dass es möglich ist, so zu schreiben, da der Code für die if unmittelbar nach dem Doppelpunkt es dem Compiler möglich macht zu verstehen, dass die nächste Zeile nicht eingerückt sein.

5
unwind

Laut Guido Van Rossum, dem Erfinder von Python, wird die Idee, einen Doppelpunkt zu verwenden, um die Struktur sichtbar zu machen, von früheren Experimenten mit einem Python-Vorgänger, der ABC-Sprache, angeregt, die auch die Anfänger ansprach. Bei ihren ersten Tests schienen Anfänger mit Dickdarm schneller voranzukommen als ohne. Lesen Sie die ganze Geschichte in Guidos Post Python History Blog.

http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

Und ja, der Doppelpunkt ist nützlich für Einzeiler und weniger lästig als das Semikolon. Außerdem sollte der Style-Guide für längere Zeit nur auf mehreren Zeilen unterbrochen werden, wenn er mit einem binären Operator endet

x = (23 + 
     24 + 
     33)

Die Hinzufügung von Doppelpunkt-zusammengesetzten zusammengesetzten Aussagen sehen für eine gleichmäßigere Stilgleichheit genauso aus.

Es gibt eine "kolonlose" Kodierung für CPython sowie einen Dialekt ohne Kolon, Cobra genannt. Die haben nicht abgeholt. 

0
Serge