2012-06-11 6 views
8

Ich dachte, dass Elif: war die Abkürzung fürfür - sonst gegen Elif

else: 
    if: 

aber es ist nicht möglich

zu verwenden - Elif:

nur

für - sonst: wenn:

in diesem code:

for line in source: 
    change_next = False 
    for dataset,artnr,revision in datasets: 
     if dataset in line: 
      change_next = True 
      print " ** " + dataset + " found" 
      datasets.remove((dataset,artnr,revision)) 
      break 
    else: 
     if line.startswith("DstID:"): 
      print line.replace("DstID:","").rstrip() 

    if change_next and "Partno:" in line: 
     destination.write("Partno: " + artnr + "\n") 
     print "Partno: " + artnr 
    elif change_next and "Revno:" in line: 
     destination.write("Revno:" + revision + "\n") 
     print "Revno:" + revision 
    else: 
     destination.write(line) 

Danke für die Antwort bisher, meine Frage ist jetzt eher: Ist das der Weg, es zu tun? Wenn eine Zeile keine (der bekannten) Datensätze enthält, möchte ich sie ausdrucken, wenn es sich um einen Datensatz handelt?

+3

Ich habe Python seit etwa 7 Jahren programmiert und ich wusste nie über die 'else' Klausel in einer 'for' Anweisung ... –

+3

@AndrewJaffe: Das ist verständlich. Es ist nicht besonders nützlich. Ich denke, es gab nur eine Handvoll Male, als ich es benutzt habe. –

+0

@JoelCornett Ich benutze es die ganze Zeit. – becko

Antwort

11

elif: ist kein Makro, das zu else: if erweitert, es ist ein syntaktisches Element, das nur in dem Kontext eines if: statement gültig ist. Normalerweise würde else: if einen neuen if Block öffnen; jedoch tut elif: das nicht.

+2

Das ist Glück, denn sonst hätten wir nicht mehrere 'elif'-Klauseln in einer 'if'-Anweisung, was schrecklich wäre! (... ich nehme an, es sei denn, die folgenden würden zu * immer mehr eingerückten * 'sonst: wenn' Blöcken, die nur bizarr wären ... Wow, ich muss jetzt mein Gehirn bleichen.) – weronika

+1

Aber es wäre sinnvoll,' zu haben elif' nach einem 'for', oder? Für mich ist die Tatsache, dass wir "für ... anderes", aber kein "für ... elif ... elif ........... else" tun können, inkonsequent. – becko

+0

Wie würde es Sinn machen, 'elif' nach einem' for' zu haben? Das "else" nach einer Schleife macht nicht dasselbe wie bei "if" (und das ist verwirrend). – kindall

8

Korrekt. Das gleiche gilt für else in try .. except .. else.

9

Die forelse ist eine spezielle Fallverwendung, nicht die selbe wie die ifelif Struktur. elif macht keinen Sinn im Zusammenhang mit for sowieso, wie die Bedeutung der forelse ist "Wenn wir die Schleife abgeschlossen haben, ohne zu brechen, tun Sie dieses Ding". Das ist binäre Logik. elif macht im Zusammenhang mit dieser binären Entscheidung keinen Sinn.

+0

Es gibt auch 'while'' else', aber es wird noch seltener verwendet als 'for' else'. – MRAB

+0

@MRAB 'elif' macht keinen kontextuellen Sinn in' while' 'else'. Oder in 'try'' except' 'else' für diese Angelegenheit. Punkt ist, dass 'elif' in diesen Kontexten nicht existiert, weil es keinen logischen Sinn dafür macht. –

+0

Für mich macht 'elif' in einem' for ... elif ... else' Kontext Sinn. Betrachten Sie es als äquivalent zu "für ... sonst wenn ... sonst". Was ergibt keinen Sinn? Ich weiß, Python-Syntax erlaubt es nicht. Ich sage das * semantisch * könnte * einen Sinn ergeben. – becko

4

Der 'else', auf den Sie verweisen, ist an den Befehl 'for' gebunden, nicht an den Befehl 'if'. 'elif' macht nur Sinn, wenn es mit einem 'if' Befehl verwendet wird.

Mit dem Befehl 'for' wird der 'else' -Block nur ausgeführt, wenn der 'for' -Block nicht vorzeitig durch einen 'break'-Befehl beendet wird, siehe paragraph 4.4.