Dies ist wirklich nur eine theoretische Frage eines Python-Neulings, der mehr verstehen möchte.
Ich vergesse immer wieder den Doppelpunkt nach den ersten Anweisungen des Blocks in Python. Das meine ich:
for <variable> in <sequence>:
if <blah blah>:
Meiner Meinung nach ist ein Grund, den ich immer wieder vergesse, dass sie de facto implizit sind: Doppelpunkt oder nicht, die Aussage endet mit dieser Zeile.
Meine Frage - die ich stelle, um zu erfahren, wie die Python-Syntax funktioniert - ist, ob der Doppelpunkt wirklich unnötig ist. Würde ich die Python-Syntax so ändern, dass der Doppelpunkt nicht mehr benötigt wird, würde irgendetwas kaputt gehen? Würde das einige Aussagen mehrdeutig oder unmöglich machen?
if
,else
,while
und so weiter. Wäre Python in diesem Fall immer noch eine Sprache, die ohne Mehrdeutigkeit verwendet werden kann?if .. then .. end
in einer einzelnen Zeile schreiben . Also wird hier in Pythonthen
durch zwei Dinge ein:
und ein erforderlicher Zeilenumbruch ersetzt. Eine davon erscheint überflüssig.Antworten:
Ja, der Doppelpunkt ist erforderlich, um bestimmte Konstrukte zu disambiguieren. Betrachten Sie zum Beispiel
if x - y < z: pass
. Ohne den Doppelpunkt können wir nicht entscheiden, wie dies analysiert werden soll, ohne den Kontext von x, y und z zu kennen.if x: -y < z...
ist gültig, wenn x boolesch ist,if x - y < z:
ist sonst gültig.Da es für eine Programmiersprache eine sehr gute Idee ist, dass Sie eine Anwendung nicht bis zu dem Punkt ausführen müssen, an dem Sie sie kompilieren, um sie analysieren zu können, ist der Doppelpunkt sehr wichtig. Sie könnten es fallen lassen, aber Sie würden andere Wege brauchen, um zu unterscheiden.
quelle
if condition: print("Condition passed")\n
erlaubt? Das\n
symbolisiert eine neue Zeile nach der print-Anweisung.Der Doppelpunkt ist grammatikalisch nicht wirklich notwendig, wenn Python in einer anderen Welt entworfen wurde, ist es durchaus vorstellbar, dass der Sprachdesigner sich nicht entscheidet, den Doppelpunkt zu fordern. Und Sprachen wie Cobra tun dies in der Tat.
Der Hauptgrund, warum Doppelpunkt in Python erforderlich ist, ist die menschliche Lesbarkeit. So zitieren Sie aus Python FAQ :
Wie auch in den FAQ erwähnt, erleichtert der Doppelpunkt die Verarbeitung von Python-Code, ohne die Sprache vollständig zu analysieren. Jeder Textprozessor, der über einen vollwertigen Parser verfügt, einschließlich des Python-Compilers, kann auf den Doppelpunkt verzichten, wenn er nicht benötigt wurde oder optional ist, wenn er eindeutig ist.
quelle
Es ist nicht notwendig für den Computer, sondern für den Menschen.
Guido van Rossum (Schöpfer von Python) hatte eine Zeit lang einen Python-Geschichtsblog. Der Doppelpunkt wurde in ABC eingeführt , der Quelle vieler Funktionen von Python.
In diesem Blogbeitrag über "Karin Dewar, Einrückung und der Doppelpunkt" schreibt Guido:
( B hier ist eine Reihe von Prototypsprachen B0, B1, ..., die zu ABC führten. Es ist nicht die B-Sprache, die der Vorgänger von C ist).
Ich erinnere mich auch daran, dass Guido in den 90er Jahren darauf hingewiesen hat, dass dies zum Vorteil der Redakteure war, die automatisch einen Einzug nach einer Zeile einfügen können, die mit einem Doppelpunkt endet. Aber dafür habe ich noch keine Quelle gefunden.
quelle
Die Syntax der Cobra-Programmiersprache ist stark von der von Python inspiriert und macht den Doppelpunkt überflüssig. Es scheint also, dass dies nicht unbedingt erforderlich ist. Es reicht jedoch nicht aus, nur den Doppelpunkt zu entfernen , sondern es sind weitere Änderungen an der Syntax erforderlich. Siehe zum Beispiel diesen Code aus einem meiner Spielzeugprojekte :
Ohne den Doppelpunkt, um den Körper von der Parameterliste zu trennen, müsste ich Einrückung verwenden:
Ich glaube, frühere Versionen von Cobra haben den Doppelpunkt optional gemacht. Sie können entweder Einrückungen oder einen Doppelpunkt oder beides verwenden. Ähnlich wie in Ruby, wo es Schlüsselwörter gibt, um die verschiedenen Teile von Steuerausdrücken zu trennen, aber Sie können auch Ausdruckstrennzeichen (Semikolon oder Zeilenvorschub) verwenden:
In aktuellen Cobra-Versionen können Sie ein Komma verwenden:
kann geschrieben werden als
Sie benötigen eine Möglichkeit, die verschiedenen Teile von Steuerelementausdrücken oder -definitionen zu trennen. In Python ist das der Doppelpunkt. Wenn Sie den Doppelpunkt entfernen, müssen Sie ihn durch etwas anderes ersetzen, z . B. durch erzwungenes Einrücken. Nur das Entfernen des Doppelpunkts wird nicht funktionieren.
Die einzige Möglichkeit, absolut sicher zu sein, besteht darin, die Syntax mit und ohne Doppelpunkt zu formalisieren und ihre Eindeutigkeit zu beweisen.
Beachten Sie jedoch, dass einer der Aphorismen des Zen von Python "Explizit ist besser als Implizit" ist, sodass die explizite Abgrenzung von Blöcken mit Doppelpunkten zur allgemeinen Philosophie von Python zu passen scheint. In den häufig gestellten Fragen zu Design und Verlauf wird auch erwähnt, dass diese Entscheidung auf empirischen Beweisen von Pythons Vorgänger ABC basiert.
quelle