Muitos programadores de Python provavelmente não sabem que a sintaxe de while
loops e for
loops inclui uma else:
cláusula opcional :
for val in iterable:
do_something(val)
else:
clean_up()
O corpo da else
cláusula é um bom local para certos tipos de ações de limpeza e é executado na finalização normal do loop: return
Ou seja, sair do loop com ou break
ignorar a else
cláusula; saindo depois que um continue
executa. Só sei disso porque procurei (mais uma vez), porque nunca consigo me lembrar de quando a else
cláusula é executada.
Sempre? Em "falha" do loop, como o nome sugere? Em terminação regular? Mesmo se o loop for encerrado comreturn
? Eu nunca posso ter certeza absoluta sem procurar.
Eu culpo minha persistente incerteza pela escolha da palavra-chave: acho else
incrivelmente unmnemônico para essa semântica. Minha pergunta não é "por que essa palavra-chave é usada para esse fim" (que eu provavelmente votaria para fechar, embora apenas depois de ler as respostas e os comentários), mas como posso pensar sobre a else
palavra - chave para que sua semântica faça sentido? pode, portanto, lembrar?
Tenho certeza de que houve uma boa quantidade de discussão sobre isso, e posso imaginar que a escolha foi feita por consistência com a cláusula try
da declaração else:
(que eu também preciso procurar) e com o objetivo de não adicionar à lista de Palavras reservadas do Python. Talvez as razões para a escolha else
esclareçam sua função e a tornem mais memorável, mas estou depois de conectar o nome à função, não depois da explicação histórica em si.
As respostas a esta pergunta , que minha pergunta foi brevemente fechada como duplicata, contêm muitas histórias interessantes. Minha pergunta tem um foco diferente (como conectar a semântica específica da else
opção de palavra-chave), mas acho que deve haver um link para essa pergunta em algum lugar.
else
meios basicamente "se a condição de continuação falhar". Em um loop for tradicional, a condição de continuação é tipicamente i < 42
, nesse caso, você pode ver essa parte comoif i < 42; execute the loop body; else; do that other thing
break
. O caso de uso canônico é quando o loop procura por algo e é interrompido quando o encontra. O else
é executado apenas se nada for encontrado.