Molti programmatori Python probabilmente non sono consapevoli del fatto che la sintassi dei while
loop e dei for
loop include una else:
clausola opzionale :
for val in iterable:
do_something(val)
else:
clean_up()
Il corpo della else
clausola è un buon posto per alcuni tipi di azioni di pulizia, ed è eseguito al termine normale del ciclo: Cioè, uscendo dal ciclo con return
o break
salta la else
clausola; uscire dopo continue
averlo eseguito. Lo so solo perché l'ho appena cercato (ancora una volta), perché non riesco mai a ricordare quandoelse
viene eseguita la clausola.
Sempre? Su "fallimento" del loop, come suggerisce il nome? In caso di risoluzione regolare? Anche se il ciclo viene chiuso con return
? Non posso mai essere del tutto sicuro senza cercarlo.
Incolpo la mia incertezza persistente sulla scelta della parola chiave: trovo else
incredibilmente poco mnemonico per questa semantica. La mia domanda non è "perché questa parola chiave viene utilizzata per questo scopo" (che probabilmente voterei per chiudere, anche se solo dopo aver letto le risposte e i commenti), ma come posso pensare alla else
parola chiave in modo che la sua semantica abbia senso, e io può quindi ricordarlo?
Sono sicuro che ci sia stata una buona dose di discussione su questo, e posso immaginare che la scelta sia stata fatta per coerenza con la clausola try
della dichiarazione else:
(che devo anche cercare) e con l'obiettivo di non aggiungere all'elenco di Le parole riservate di Python. Forse i motivi della scelta else
chiariranno la sua funzione e la renderanno più memorabile, ma dopo aver collegato il nome alla funzione, non dopo una spiegazione storica in sé.
Le risposte a questa domanda , di cui la mia domanda è stata brevemente chiusa in duplice copia, contengono molte storie retrostanti interessanti. La mia domanda ha un focus diverso (come collegare la semantica specifica della else
scelta della parola chiave), ma ritengo che ci dovrebbe essere un collegamento a questa domanda da qualche parte.
else
mezzi fondamentalmente, "se la condizione di continuazione fallisce". In un ciclo for tradizionale, la condizione di continuazione è in genere i < 42
, nel qual caso è possibile visualizzare quella parte comeif i < 42; execute the loop body; else; do that other thing
break
. Il caso d'uso canonico è quando il ciclo cerca qualcosa e si interrompe quando lo trova. L' else
viene eseguito solo se non viene trovato nulla.