2010-02-03 6 views
16

Gibt es einen guten Grund, warum es in Python keine Anweisung zum Ausführen von Flow Control gibt?Warum gibt es in Python keine Anweisung zum Ausführen der Flusssteuerung?

Warum müssen die Leute while und break explizit schreiben?

+1

"schreiben während ... explizit"? Was bedeutet das? Wie schreibt "do while" nicht explizit 'while'? Ich verstehe diesen Teil der Frage nicht. –

+1

Was ist der Grund dafür, dass Sie das wissen müssen? Wie hilft Ihnen diese Tatsache, Programmierprobleme zu lösen? –

+3

Es ist eine sehr gute Frage und eine häufige Quelle der Bedrängnis für neue Python-Benutzer. –

Antwort

11

Es wurde in PEP 315 vorgeschlagen, wurde aber nicht implementiert, weil niemand eine Syntax erfunden hat, die klarer als die while True mit einer inneren if-break ist.

+1

Was stimmt nicht mit Do ... während True? – Mavrik

+3

Schauen Sie sich http://mail.python.org/pipermail/python-dev/2006-February/060718.html an, die vom PEP verlinkt ist. Es erklärt das Problem mit verschiedenen Syntaxalternativen etwas ausführlicher. –

10

Wahrscheinlich weil Guido es nicht für nötig hielt. Es gibt eine Reihe verschiedener Flow-Control-Anweisungen, die Sie unterstützen könnten, aber die meisten sind Varianten voneinander. Ehrlich gesagt, ich habe die Do-While-Anweisung als eine der weniger nützlichen gefunden.

+0

+1, ich möchte fast immer meine Bedingungen an der Spitze. macht den Nullfall viel sauberer. – Javier

+14

Ja, wahrscheinlich dachte GuiDO es nicht wertWHILE –

+1

in Pascal verwende ich immer wiederholen-bis (Bedingung). In C++ verwende ich Do-While (Bedingung) selten. Kannst du das erklären? :) –

2

Python fügt Funktionen nur dann hinzu, wenn sie einigen Code erheblich vereinfachen.

ist nicht weniger einfach als eine Do-While-Schleife, für die es sowieso keine offensichtliche natürliche Python-Syntax gibt.

do: 
    ... 
    while cond 

(Sieht seltsam)

oder das?

do: 
    ... 
while cond 

(Die während sieht aus wie eine regelmäßige while-Anweisung)

+3

'break's in einer Bedingung in der Mitte der Schleife erfordert mehr Code-Parsing als das Parsen einer expliziten' do ... bis ... 'Struktur. So würde das Lesen von Code vereinfacht werden. Da das "while cond" seltsam aussieht, könnte es durch ein äquivalentes "bis cond" ersetzt werden, was explizit wäre. Ich denke, dass es gute Gründe gibt, nicht zu tun ... bis Kontrollstruktur, jedoch; das Lesen der ursprünglichen Diskussion wäre wahrscheinlich nützlich. – EOL

3

Denn dann würden Sie zwei Möglichkeiten haben, etwas zu tun.

+3

Eine do-while/repeat-bis-Schleife ist nicht dasselbe wie eine while-Schleife. Ersteres wird immer mindestens einmal ausgeführt, letzteres jedoch möglicherweise überhaupt nicht ausgeführt. – GreenMatt

+0

@GreenMatt, darüber redet er nicht. Sie haben dann 2 Möglichkeiten, eine Bedingung manuell zu durchlaufen. Pre- und Post-Bedingungen unterscheiden sich nicht wirklich genug, um die Erweiterung der Python-Syntax zu rechtfertigen. –

+0

@Matt Joiner: Erstens nehme ich nicht an zu wissen, was Austin dachte, als er diesen Eintrag machte. Um Ihren Kommentar zu adressieren: Ich weiß, dass das Denken ist, dass Python die zusätzliche Schleifenstruktur nicht benötigt. Ich weise nur auf den Unterschied hin, dass jemand, der nichts anderes weiß, denken würde, dass die beiden Schleifenmechanismen genau dasselbe tun. – GreenMatt

Verwandte Themen