2012-06-11 19 views
8

pensé que elif: era la abreviatura depara - cosa vs para elif

else: 
    if: 

pero no es posible utilizar

para - Elif:

única

para - else: if:

en este código:

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) 

Gracias por la respuesta hasta ahora, mi pregunta ahora es más bien: ¿es esta la manera de hacerlo? si una línea no tiene ningún conjunto de datos (conocido), ¿quiero imprimirlo si es un conjunto de datos?

+3

He estado programando Python durante aproximadamente 7 años y nunca supe sobre la cláusula 'else' en una declaración' for' ... –

+3

@AndrewJaffe: Eso es comprensible. No es particularmente útil. Creo que solo ha habido un puñado de veces cuando lo he usado. –

+0

@JoelCornett Lo uso todo el tiempo. – becko

Respuesta

11

elif: no es una macro que se expande a else: if, es un elemento sintáctico que solo es válido en el contexto de if: statement. Ordinariamente, else: if abriría un nuevo bloque if; sin embargo, elif: no hace eso.

+2

¡Qué suerte, porque de lo contrario no podríamos tener múltiples cláusulas 'elif' en una declaración' if', lo que sería horrible! (... supongo que a menos que los siguientes se expandieran a * cada vez más sangría * 'else: if' bloques, lo que sería simplemente extraño ... Wow, necesito blanquear mi cerebro ahora.) – weronika

+1

Pero tendría sentido tener' elif' después de un 'for', ¿verdad? Para mí, el hecho de que podemos hacer 'por ... else', pero no' por ... elif ... elif ........... else' parece inconsistente. – becko

+0

¿Cómo tendría sentido tener 'elif' después de' for'? El 'else' después de un bucle no hace lo mismo que con' if' (y eso es confuso). – kindall

8

Correcto. Lo mismo vale para else en try .. except .. else.

9

El forelse es un uso de caja especial, no es lo mismo que la estructura ifelif. elif en realidad no tiene sentido en el contexto de for de todos modos, ya que el significado de forelse es "si hemos completado el ciclo sin romper, hagamos esto". Esa es la lógica binaria. elif no tiene sentido en el contexto de esta decisión binaria.

+0

También hay 'while'' else', pero se usa incluso con menos frecuencia que 'for'' else'. – MRAB

+0

@MRAB 'elif' no tiene sentido contextual en' while' 'else' tampoco. O en 'try'' except' 'else' para ese asunto. El punto es que 'elif' no existe en esos contextos porque no tiene sentido lógico para eso. –

+0

Para mí 'elif' tiene sentido en un contexto' for ... elif ... else'. Piense que es equivalente a 'for ... else if ... else'. ¿Qué no tiene sentido al respecto? Sé que la sintaxis de Python no lo permite. Estoy diciendo que * semánticamente * podría * tener sentido. – becko

4

El 'else' al que se refiere está vinculado al comando 'for', no a un comando 'if'. 'elif' solo tiene sentido cuando se usa con un comando 'if'.

Con el comando 'for', el bloque 'else' se ejecuta solo si el bloque 'for' no termina prematuramente con un comando 'break', ver paragraph 4.4.

Cuestiones relacionadas