Existe uma diferença entre `continue` e` pass` em um loop for em python?


274

Existe alguma diferença significativa entre as duas palavras continue- chave python epass como nos exemplos

for element in some_list:
    if not element:
        pass

e

for element in some_list:
    if not element:
        continue

Eu deveria estar ciente?


4
@ S.Lott: O exemplo: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)nos documentos python me confundiram do jeito que eu não achei tempo claro que se comporta de maneira equivalente a continuar nesse caso ou se pretendia algo mais. A primeira frase "A declaração de aprovação não faz nada". caracteriza todas as respostas à minha pergunta, mas de alguma forma isso não chamou minha atenção.
Aufwind

Respostas:


400

Sim, eles fazem coisas completamente diferentes. passsimplesmente não faz nada, enquanto continuecontinua com a próxima iteração do loop. No seu exemplo, a diferença se tornaria aparente se você adicionasse outra instrução após o if: Após a execução pass, essa instrução adicional seria executada. Depois continue, não.

>>> a = [0, 1, 2]
>>> for element in a:
...     if not element:
...         pass
...     print element
... 
0
1
2
>>> for element in a:
...     if not element:
...         continue
...     print element
... 
1
2

7
Estou totalmente de acordo com sua resposta. mas ainda tenho dúvidas sobre a palavra-chave de passe, é necessário? e necessário, mas por quê? Obrigado
Hardik Gajjar

34
@HardikGajjar: Como a passpalavra - chave não faz nada, ela só é útil quando você precisa sintaticamente de um conjunto recuado, mas não quer fazer nada. Um exemplo comum é se você deseja ignorar alguma exceção, você usa except SomeException: pass. Existem muitos outros casos de uso também. Você não precisaria estritamente de uma palavra-chave para isso, pois você poderia usar qualquer outra declaração que não faça nada (por exemplo, 0é uma declaração perfeitamente válida que não tem efeito), mas ter uma palavra-chave para isso permite que você seja mais explícito sobre não querer fazer nada.
Sven Marnach

@SvenMarnach é desaprovado estilisticamente para tratar exceções com pass?
Bjorks fã número um

@MikePalmice Nem um pouco.
Matt M.

73

Sim, há uma diferença. continueforça o loop a iniciar na próxima iteração, enquanto passsignifica "não há código para executar aqui" e continuará pelo restante ou pelo corpo do loop.

Execute estes e veja a diferença:

for element in some_list:
    if not element:
        pass
    print 1 # will print after pass

for element in some_list:
   if not element:
       continue
   print 1 # will not print after continue

23

continuepulará de volta para o topo do loop. passcontinuará o processamento.

se a aprovação estiver no final do loop, a diferença será insignificante, pois o fluxo retornaria ao topo do loop de qualquer maneira.


11

No seu exemplo, não haverá diferença, pois as duas instruções aparecem no final do loop. passé simplesmente um espaço reservado, na medida em que não faz nada ( passa a execução para a próxima instrução). continue, por outro lado, tem um objetivo definido: diz ao loop para continuar como se tivesse acabado de reiniciar.

for element in some_list:
    if not element:
        pass
    print element  

é muito diferente de

for element in some_list:
    if not element:
        continue
    print element

6

Há uma diferença entre eles,
continueignora a iteração atual do loop e executa a próxima iteração.
passfaz nada. É um espaço reservado para declaração vazio.
Prefiro dar um exemplo, que esclarecerá isso melhor.

>>> for element in some_list:
...     if element == 1:
...         print "Pass executed"
...         pass
...     print element
... 
0
Pass executed
1
2

>>> for element in some_list:
...     if element == 1:
...         print "Continue executed"
...         continue
...     print element
... 
0
Continue executed
2

5

Sim, há uma diferença. Continuerealmente pula o restante da iteração atual do loop (retornando ao início). Passé uma declaração em branco que não faz nada.

Veja os documentos python



3

Diferença entre passar e continuar em um loop for:

Então, por que passar em python?

Se você deseja criar uma classe, método ou bloco vazio.

Exemplos:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

sem 'pass' nos exemplos acima lançará IndentationError.


1
x = [1,2,3,4] 
for i in x:
    if i==2:
         pass  #Pass actually does nothing. It continues to execute statements below it.
         print "This statement is from pass."
for i in x:
    if i==2:
         continue #Continue gets back to top of the loop.And statements below continue are executed.
         print "This statement is from continue."

A saída é

>>> This statement is from pass.

Novamente, vamos executar o mesmo código com pequenas alterações.

x = [1,2,3,4]
for i in x:
    if i==2:
       pass  #Pass actually does nothing. It continues to execute statements below it.
    print "This statement is from pass."
for i in x:
    if i==2:
        continue #Continue gets back to top of the loop.And statements below continue are executed.
    print "This statement is from continue."

A saída é -

>>> This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from pass.
This statement is from continue.
This statement is from continue.
This statement is from continue.

O passe não faz nada. A computação não é afetada. Mas continue volta ao topo do loop para prosseguir com o próximo cálculo.


3
Qual é a diferença especial com outras respostas já disponíveis?
BHUVANESH MOHANKUMAR 7/17/17

1

Considere desta maneira:

Passe: Python funciona puramente em recuo! Não há chaves vazias, ao contrário de outros idiomas.

Portanto, se você não quiser fazer nada, caso uma condição seja verdadeira, não há outra opção senão passar.

Continuar: Isso é útil apenas em caso de loops. Caso, para um intervalo de valores, você não queira executar as instruções restantes do loop depois que a condição for verdadeira para essa passagem específica, será necessário usar continue.


Portanto, se você não quiser fazer nada, caso uma condição seja verdadeira, não há outra opção senão a aprovação -> isso não é exato, veja, por exemplo, o comentário de Sven Marnach acima.
patrick

1
@patrick Desculpe, mas ele está correto. No caso em que, por exemplo, uma variável possa ser tanto float quanto int, e você deseja executar uma operação em todas as entradas, basta usar uma instrução if que verifica flutuações, use a passse a instrução for Truee execute a operação, se estiver False. Isso permite uma varredura eficiente de listas multiuso.
1313e 02/07/19

0

passpode ser usado em cenários quando você precisa de algumas funções, classes ou loops vazios para futuras implementações e não há necessidade de executar qualquer código.
continueé usado em cenários em que não quando alguma condição se encontra dentro de um loop e você precisa pular a iteração atual e passar para a próxima.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.