Notei que o código a seguir é legal no Python. Minha pergunta é por que? Existe um motivo específico?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Notei que o código a seguir é legal no Python. Minha pergunta é por que? Existe um motivo específico?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
else
para esse uso tinha sido uma ideia extremamente ruim e que eles não fariam mais isso.after:
.Respostas:
A
else
cláusula é executada apenas quando suawhile
condição se torna falsa. Se vocêbreak
sair do loop ou se uma exceção for gerada, ela não será executada.Uma maneira de pensar sobre isso é como uma construção if / else com relação à condição:
é análogo à construção de loop:
Um exemplo pode ser ao longo das linhas de:
fonte
while {} something
exceto que osomething
será ignorado se você estiverbreak
nowhile
loop.A
else
cláusula é executada se você sair de um bloco normalmente, atingindo a condição de loop ou caindo na parte inferior de um bloco try. É não executada se vocêbreak
oureturn
fora de um bloco, ou levantar uma exceção. Ele funciona não apenas durante o tempo e para os loops, mas também tenta blocos.Você normalmente o encontra em lugares onde normalmente você sairia de um loop mais cedo, e correr o final do loop é uma ocasião inesperada / incomum. Por exemplo, se você estiver percorrendo uma lista procurando um valor:
fonte
found_it=False
no início de um loop e, em seguida, faça um check sefound_it
no finalEm resposta
Is there a specific reason?
, aqui está uma aplicação interessante: rompendo com vários níveis de loop.Aqui está como funciona: o loop externo tem uma interrupção no final, portanto, seria executado apenas uma vez. No entanto, se o loop interno for concluído (não encontra divisor), ele alcançará a instrução else e a quebra externa nunca será alcançada. Dessa forma, uma quebra no loop interno sairá dos dois loops, em vez de apenas um.
Para ambos
while
efor
loops, aelse
instrução é executada no final, a menos que tenhabreak
sido usada.Na maioria dos casos, existem maneiras melhores de fazer isso (agrupando-o em uma função ou gerando uma exceção), mas isso funciona!
fonte
A cláusula else é executada quando a condição while é avaliada como falsa.
A partir da documentação :
fonte
Minha resposta se concentrará em QUANDO podemos usar while / for-else.
À primeira vista, parece que não há diferenças ao usar
e
Como a
print 'ELSE'
instrução parece sempre executada nos dois casos (quando owhile
loop termina ou não é executado).Então, só é diferente quando a instrução
print 'ELSE'
não será executada. É quando existe umbreak
dentro do bloco de código emwhile
Se for diferente de:
return
não está nesta categoria, porque faz o mesmo efeito nos dois casos acima.O aumento de exceção também não causa diferença, porque quando gera, onde o próximo código será executado está no manipulador de exceções (exceto bloco), o código na
else
cláusula ou logo após owhile
cláusula não será executado.fonte
Eu sei que esta é uma pergunta antiga, mas ...
Como Raymond Hettinger disse, deveria ser chamado em
while/no_break
vez dewhile/else
.Acho fácil entender e se você olhar para este trecho.
Agora, em vez de verificar a condição após o loop while, podemos trocá-la
else
e nos livrar dessa verificação.Eu sempre o leio
while/no_break
para entender o código e essa sintaxe faz muito mais sentido para mim.fonte
A cláusula else é executada apenas quando a condição while se torna falsa.
aqui estão alguns exemplos:
Exemplo 1: Inicialmente a condição é falsa, portanto , a cláusula else é executada.
RESULTADO:
Exemplo 2: A condição while
i < 5
nunca se tornou falsa porquei == 3
quebra o loop; portanto , a cláusula else não foi executada.RESULTADO:
Exemplo 3: A condição while
i < 5
se tornou falsa quandoi
was5
, então a cláusula else foi executada.RESULTADO:
fonte
A
else:
instrução é executada quando e somente quando o loop while não atender mais a sua condição (no seu exemplo, quandon != 0
for falso).Portanto, a saída seria esta:
fonte
Caso contrário, o loop while não quebrou.
Eu meio que gosto de pensar nisso com uma metáfora de 'corredor'.
O "outro" é como cruzar a linha de chegada, não importando se você começou no início ou no final da pista. "else" não é executado apenas se você quebrar em algum lugar.
Os principais casos de uso estão usando essa quebra de loops aninhados ou se você deseja executar algumas instruções apenas se o loop não quebrar em algum lugar (pense em quebrar sendo uma situação incomum).
Por exemplo, a seguir está um mecanismo sobre como interromper um loop interno sem usar variáveis ou tentar / capturar:
fonte
O melhor uso da construção 'while: else:' no Python deve ser se nenhum loop for executado em 'while' e a instrução 'else' será executada. A maneira como funciona hoje não faz sentido, porque você pode usar o código abaixo com os mesmos resultados ...
fonte
else
bloco não será executado se você estiver saindo do loop usandobreak
oureturn
keyword. No seu exemplo,print
será executado também se o loop terminar nobreak
comando.É útil para interação social.
fonte
else
aqui? O código faz exatamente o mesmo sem ele.break
durante a contagem regressiva, não usarelse
o fará dizer "Feliz Ano Novo!" instantaneamente, o que não faz nenhum sentido.break
"? Não existebreak
no código.