Hallo Leute,
bin neu hier und ganz neu bei Python. Ich programmiere mich gerade durch byteOfPython, was ich einen sehr guten Einstieg finde. Aber mit dem Indentation-Konzept bei Python tue ich mich noch ein bißchen schwer Das kannte ich so noch von keiner anderen Sprache. Natürlich rücke ich auch bei anderen Sprachen ein, soweit wie es die Logik an der jeweiligen Stelle erfordert. (Ich kenne auch Sprache, wo der Interpreter/Compiler das - auf Wunsch - auch nachträglich erledigt, wenn man's mal vergißt!) Aber daß der Interpreter das explizit verlangt, war mir bisher noch nicht untergekommen.
Meine Frage dazu: Wenn die Indentation bei Python sowieso obligatorisch ist, was soll dann noch der Doppelpunkt? Das ist doch dann redundant, oder?
Und der Interpreter scheint die Indentation-levels auch nicht mitzuzählen: Ich kann auch zwei oder drei eingeben, auch wenn logisch an dieser Stelle nur eine verlangt wäre.
Grüße, Dirk
Doppelpunkt und Indentation: doppelt gemoppelt?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Ja und? Zwei Schleifentypen sind auch redundant. Ein Doppelpunkt leitet eben eine Suite ein, damit kann man eben abstrakt von allen eingerueckten Blöcken sprechen und nicht nur von "for-Bloecken", "while-Bloecken" und so weiterdjh hat geschrieben:Meine Frage dazu: Wenn die Indentation bei Python sowieso obligatorisch ist, was soll dann noch der Doppelpunkt? Das ist doch dann redundant, oder?
Eine Einrueckungsebene ist nicht fest, sondern wird durch die erste eingerueckte Anweisung bestimmt.djh hat geschrieben:Und der Interpreter scheint die Indentation-levels auch nicht mitzuzählen: Ich kann auch zwei oder drei eingeben, auch wenn logisch an dieser Stelle nur eine verlangt wäre.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Der Doppelpunkt ist mitnichten redundant. Ohne wäre die Grammatik der Sprache nicht eindeutig, oder zumindest nicht so offensichtlich.
@djh: Einrückung kann kein Interpreter/Compiler nachträglich für Dich erledigen wenn Du nicht irgendwie anders, zum Beispiel durch Klammern, Deine Absichten kundgetan hast. Sonst müsste der Compiler wissen was Du denkst und die beabsichtigte Semantik verstehen können. Wenn Compiler *so* weit sind, braucht man keine Programmierer mehr.
Why are colons required… ist eine FAQ.
Du verwechselst Einrückebene mit einer Anzahl von Leerraum-Zeichen. Eine Ebene wird durch die Spalte bestimmt an der aufeinanderfolgende, nicht-leere Zeilen beginnen und nicht durch die Spaltennummer an der eine einzelne Zeile beginnt.
Es gibt auch noch andere Programmiersprachen, bei denen die Einrückung ein wichtiges Mittel zur Strukturierung des Quelltextes ist, und nicht nur "Kosmetik". Haskell, Nemerle (optional), und CoffeeScript wären Beispiele für solche Sprachen.
@lunar: Wäre sie nicht? Mal den Fall dass man die "Suite" in der gleichen Zeile schreiben möchte ausser acht gelassen, was wäre denn dann noch mehrdeutig?
Why are colons required… ist eine FAQ.
Du verwechselst Einrückebene mit einer Anzahl von Leerraum-Zeichen. Eine Ebene wird durch die Spalte bestimmt an der aufeinanderfolgende, nicht-leere Zeilen beginnen und nicht durch die Spaltennummer an der eine einzelne Zeile beginnt.
Es gibt auch noch andere Programmiersprachen, bei denen die Einrückung ein wichtiges Mittel zur Strukturierung des Quelltextes ist, und nicht nur "Kosmetik". Haskell, Nemerle (optional), und CoffeeScript wären Beispiele für solche Sprachen.
@lunar: Wäre sie nicht? Mal den Fall dass man die "Suite" in der gleichen Zeile schreiben möchte ausser acht gelassen, was wäre denn dann noch mehrdeutig?
@BlackJack: Keine Ahnung, ich glaube nichts mehr, aber so genau habe ich darüber nicht nachgedacht. Mir ist beim Lesen des Beitrags von DasIch nur unmittelbar aufgefallen, dass man Einzeiler ohne Doppelpunkt nicht eindeutig zerlegen kann.
@cofi: "for" und "while" sind redundant? Wie würdest Du "while True:" denn über "for" ausdrücken?!
@cofi: "for" und "while" sind redundant? Wie würdest Du "while True:" denn über "for" ausdrücken?!
@lunar: Na so:
Aber vielleicht war auch eher ``for`` mit redundant gemeint.
Code: Alles auswählen
for dummy in itertools.repeat(True):
pass
Aber vielleicht war auch eher ``for`` mit redundant gemeint.
@BlackJack: Ich wusste, dass das jetzt kommt Daran, dass "for" gemeint sein könnte, habe ich allerdings nicht gedacht ...
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das macht ja auch das Argument kaputt Dass es Probleme gibt, wenn man mit der spezielleren Schleife die generelle Ausdruecken will, ist klar.lunar hat geschrieben:Daran, dass "for" gemeint sein könnte, habe ich allerdings nicht gedacht ...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
lunar hat geschrieben: @cofi: "for" und "while" sind redundant? Wie würdest Du "while True:" denn über "for" ausdrücken?!
Code: Alles auswählen
for _ in itertools.repeat(True):
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Verdammte Axt... hatte BlackJacks Beitrag tatsächlich übersehen!lunar hat geschrieben:@Hyperion: Soweit waren wir in dieser Diskussion schon
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@BlackJack:
Ich kann in NATURAL z.B. folgendes Programm codieren - und das läuft dann:
Wenn ich aber irgendwann den editor-Befehl "struct" absetze, sieht der Code so aus, wie er sollte - es wird automatisch richtig eingerückt, mit Berücksichtigung der verschiedenen logischen Ebenen:
(In dieser Sprache sind eben nicht nur die Blockanfangsindikatoren - for, while, if, case, ... sondern auch die Blockendeindikatoren obligatorisch, so daß der Interpreter damit klarkommt.)
Das Bsp. ist natürlich Pipifax, aber bei längeren Programmen weiß man manchmal nicht mehr genau, auf welcher Schachtelungsbene man sich befindet und da fand ich diese Funktion gelegentlich doch ganz hilfreich.
Aber danke für den Hinweis auf die FAQs. (Ich kann halt nicht die gesamte Dokumentation an einem Tag lesen )
Völlig klar, aber genau das muß man ja in vielen Sprachen tun. Und DANN kann der Compiler natürlich die Semantik erkennen und Code durch Einrückung "aufhübschen".Einrückung kann kein Interpreter/Compiler nachträglich für Dich erledigen wenn Du nicht irgendwie anders, zum Beispiel durch Klammern, Deine Absichten kundgetan hast.
Ich kann in NATURAL z.B. folgendes Programm codieren - und das läuft dann:
Code: Alles auswählen
DEFINE DATA LOCAL
1 #I (I2)
1 #REST (I2)
1 #TEILER (I2)
END-DEFINE
*
FOR #I = 1 TO 12
DIVIDE 2 INTO #I GIVING #TEILER REMAINDER #REST
IF #REST = 0
WRITE #I 'ist gerade'
END-IF
END-FOR
END
Code: Alles auswählen
FOR #I = 1 TO 12
DIVIDE 2 INTO #I GIVING #TEILER REMAINDER #REST
IF #REST = 0
WRITE #I 'ist gerade'
END-IF
END-FOR
Das Bsp. ist natürlich Pipifax, aber bei längeren Programmen weiß man manchmal nicht mehr genau, auf welcher Schachtelungsbene man sich befindet und da fand ich diese Funktion gelegentlich doch ganz hilfreich.
Aber danke für den Hinweis auf die FAQs. (Ich kann halt nicht die gesamte Dokumentation an einem Tag lesen )
Da muß ich jetzt was länger drüber nachdenken, aber ich glaube, das geht tatsächlich in die Richtung, die ich meinte, bzw. wo mir das rechte Verständnis noch fehlte.Du verwechselst Einrückebene mit einer Anzahl von Leerraum-Zeichen. Eine Ebene wird durch die Spalte bestimmt an der aufeinanderfolgende, nicht-leere Zeilen beginnen und nicht durch die Spaltennummer an der eine einzelne Zeile beginnt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also ich programmiere Python seit etwa 7 Jahren und hatte dieses Problem nie. Der Trick ist, einfach nicht so tief zu verschachteln. Was auch sinnvoll ist angesichts dessen dass Zeilen nicht länger als 80 Zeichen werden sollten sowie das für die Einrückungsebenenen "Klasse" und "Methode" ja allein schon 8 Zeichen weggehen. Das ist aber durchaus machbar in Python. Teif verschachtelte Strukturen sind für mich ein Signal, dass der Code suboptimal strukturiert ist.djh hat geschrieben:Das Bsp. ist natürlich Pipifax, aber bei längeren Programmen weiß man manchmal nicht mehr genau, auf welcher Schachtelungsbene man sich befindet und da fand ich diese Funktion gelegentlich doch ganz hilfreich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice