2009-12-20 9 views
30

Ich habe gelesen, dass Python alle "Code-Blöcke" durch Einrückung statt mit geschweiften Klammern macht. Ist das richtig? Also, Funktionen, wenn's und solche Sachen erscheinen, ohne ihren Block mit geschweiften Klammern zu umgeben?Stimmt es, dass ich geschweifte Klammern in Python nicht verwenden kann?

+7

http://stackoverflow.com/questions/1003841/how-do-i-move-the-turtle-in-logo – Skilldrick

+11

Tatsächlich unterstützt Python geschweifte Klammern, BEGIN/END und fast alle anderen Sprachschemas: siehe http: //www.python. org/doc/humour/# python-block-abgegrenzte-notation-parsing-erklärt! –

+32

"Keine Frage ist Neuling genug" (Zitat aus SO FAQ). SO geht es um Fragen, die beantwortet werden können. Ich glaube beide sind hier wahr. Vielleicht ist das für Pythonisten eine triviale Frage, aber na und? Andere fragen "wie man Sekunden aus einem Zeitstempel bekommt" oder "Was ist eine Hex-Zahl" und niemand beschwert sich. – Abel

Antwort

245
if foo: #{ 
    print "it's true" 
#} 
else: #{ 
    print "it's false!" 
#} 

(Offensichtlich ist dies ein Witz.)

+0

So ist es möglich. cool! – openfrog

+4

@openfrog: nein, es ist nicht, das sind nur einzeilige Code-Kommentare ... (und er sagte, es war ein Witz) – Abel

+3

@Abel ist korrekt. Ich hätte den Witz in einem Kommentar erklären sollen, nur für den Fall. –

7

Ja.

Grundsätzlich, wo immer Sie eine öffnende geschweifte Klammer hätten, verwenden Sie stattdessen einen Doppelpunkt. Unentschlossen, um die Region zu schließen. Es dauert nicht lange, bis es sich ganz natürlich anfühlt.

9

Yup :)

Und es gibt (in der Regel) eine Differenz zwischen 4 Räumen und einer Lasche, so stellen Sie sicher, dass Sie die Verwendung standardisieren ..

+5

Sehr zu empfehlen, um 4 Leerzeichen über Tab zu verwenden, also ändere alte Gewohnheiten, wenn du momentan Tabs verwendest :) –

+8

Keinesfalls werde ich den Tab für Leerzeichen ändern. Alle anderen Code, den ich seit 10 Jahren geschrieben habe, verwenden den Tab-Einzug ohne Probleme. – Jonny

+6

@ Jordan Messina stimme ich nicht, und stark so. Zum Einrücken sind Registerkarten Räumen sehr überlegen. Ich weiß, dass Python offiziell empfiehlt, Leerzeichen zu verwenden, aber ich wünschte, es würde nicht funktionieren. – antred

23

Ja. Curly Hosenträger werden nicht verwendet. Stattdessen verwenden Sie die : Symbol neue Blöcke einzuführen, etwa so:

if True: 
    do_something() 
    something_else() 
else: 
    something() 
+2

Wie beenden Sie einen Block? – Jonny

+1

Sie könnten die Funktionsnamen so umschreiben, dass sie PEP 8-konform sind. Anfängerfragen sollten mit den besten Beispielen beantwortet werden. – dnevins

+2

@Jonny: Blöcke werden implizit durch einen outdent/dedent/independent beendet - d. H. Wenn Sie die Einrückungsstufe um eins reduzieren. Es gibt kein explizites Zeichen, das verwendet wird, um das Ende des Blocks zu markieren. Dies bedeutet, dass Sie anders als in C zum Beispiel nicht mehrere Blöcke auf demselben Niveau haben können, da dies Mehrdeutigkeit erzeugen würde. –

29

für Codeblöcke Richtige. Sie definieren jedoch Wörterbücher in Python mithilfe geschweifter Klammern:

Ahhhhhh.

79

Sie können versuchen, Unterstützung mit einer future import Anweisung für Klammern hinzuzufügen, aber es ist noch nicht unterstützt, so dass Sie einen Syntaxfehler erhalten werden:

+1

und für jeden, der sich fragt, ist diese wichtige Aussage ein Osterei. Die Ausnahme sind die Python-Devs, die sagen "nein, niemals hinzufügen". – Sirens

3

Wie andere erwähnt haben, sind Sie richtig, keine geschweiften Klammern in Python. Auch haben Sie keine Ende oder endif oder Ende für oder etwas ähnliches (wie in Pascal oder Rubin). Alle Codeblöcke sind indentationsbasiert.

2

Ja, Codeblöcke in Python durch ihre Vertiefung definiert sind. Die Ersteller von Python waren sehr daran interessiert, Code selbst zu dokumentieren. Sie enthalten Einrückungen in der Syntax, um von sich aus eine gute Formatierungspraxis durchzusetzen.

Ich programmierte in Python für ein paar Jahre und wurde ziemlich lieben seine Code-Struktur, weil es wirklich einfacher ist. Hast du jemals eine schließende geschweifte Klammer in einem großen Programm weggelassen und stundenlang versucht, sie zu finden? Kein Problem in Python. Als ich diesen Job verließ und PHP verwenden musste, vermisste ich wirklich die Python-Syntax.

+9

"Hast du jemals eine schließende geschweifte Klammer in einem großen Programm weggelassen und stundenlang versucht, sie zu finden?" Nein niemals. Aber ich hatte Werkzeuge oder Redakteure, die das Whitespace bei einigen Gelegenheiten vermasselten und keine Möglichkeit hatten, das Ergebnis zu disambiguieren. – alexh

+1

@alexh Die Zeiten haben sich wirklich geändert! Zurück im B.C. Tage (vor Mobiltelefonen) hatten wir nicht immer Text-Editoren, die Klammern automatisch anpassen oder Klammern automatisch einfügen konnten. Ich glaube, Ihre Erfahrung zeigt, dass die Entwicklung der Whitespace-Erkennung im Allgemeinen hinter dem Bracket-Matching zurückliegt. Es gibt Text-Editoren, die speziell für Python entwickelt wurden, die den Leerraum nicht vermasseln. Tipp: Stellen Sie sicher, dass Ihr Editor so eingestellt ist, dass er Leerzeichen und Tabulatoren identifiziert. –

2

Python with Braces ist eine Variante von Python, mit der Sie genau das tun können. Es ist ein Projekt, an dem ich in letzter Zeit zusammen mit meinem Freund gearbeitet habe.

4

Python verwendet keine geschweiften Klammern für Codeblöcke:

>>> while True { 
    File "<stdin>", line 1 
    while True { 
      ^
SyntaxError: invalid syntax 

>>> from __future__ import braces 
    File "<stdin>", line 1 
SyntaxError: not a chance 

(Beachten Sie die „keine Chance“ Nachricht - das ist ein Osterei reflektieren diese Design-Entscheidung.)

Als Sprache, die einfach zu verwenden und zu lesen ist, verwendet Python Doppelpunkte und Einrückungen, um Code-Blöcke zu bezeichnen. Die Definition von Code-Blöcken durch Einrückung ist ungewöhnlich und kann für Programmierer, die Sprachen wie C++ und C# gewohnt sind, überraschend sein, da diese (und viele andere Sprachen) sich nicht um zusätzliche Leerzeichen oder Einrückungen kümmern. Diese Regel soll die Lesbarkeit von Python-Code erhöhen, auf Kosten einiger der Freiheit des Programmierers, unterschiedliche Mengen an Leerzeichen zu verwenden.

Eine Erhöhung der Einrücktiefe zeigt den Beginn eines Codeblocks an, während eine Abnahme das Ende des Codeblocks angibt. Laut Konvention ist jede Einrückung vier Felder breit.

Hier ist ein einfaches Beispiel, das die ganzen Zahlen alle von 0 bis 9. Hinweis Summen, die in Python Bereiche umfassen den ersten Wert, bis zu, aber nicht der letzte Wert einschließlich:

j = 0 
for i in range(0, 10): 
    j += i 
print(j) 
+0

Ein weiteres schönes Juwel in Python –

Verwandte Themen