Existe-t-il une différence entre «continuer» et «passer» dans une boucle for en python?


274

Y a-t-il une différence significative entre les deux mots continue- clés python et passcomme dans les exemples

for element in some_list:
    if not element:
        pass

et

for element in some_list:
    if not element:
        continue

Je devrais être au courant?


4
@ S.Lott: L'exemple: while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)dans les documents en python, je suis confus dans le chemin, que je ne trouve pas qu'il fait clair qu'il se comporte de manière équivalente à continuer dans ce cas ou quelque chose d'autre était prévu. La première phrase "La déclaration de passage ne fait rien." caractérise toutes les réponses à ma question, mais d'une manière ou d'une autre, cela n'a pas attiré mon attention.
Aufwind

Réponses:


400

Oui, ils font des choses complètement différentes. passne fait simplement rien, tout en continuepoursuivant avec l'itération de boucle suivante. Dans votre exemple, la différence deviendrait apparente si vous ajoutiez une autre instruction après if: Après l'exécution pass, cette instruction supplémentaire serait exécutée. Après continue, ce ne serait plus le cas.

>>> 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
Im totalement d'accord avec votre réponse. mais j'ai encore une question concernant le mot de passe est-il nécessaire? et nécessaire mais pourquoi? Merci
Hardik Gajjar

34
@HardikGajjar: Étant donné que le passmot clé ne fait rien, il n'est utile que lorsque vous avez besoin syntaxiquement d'une suite en retrait, mais que vous ne voulez rien faire. Un exemple courant est que si vous souhaitez ignorer une exception, vous utilisez except SomeException: pass. Il existe également de nombreux autres cas d'utilisation. Vous n'auriez pas strictement besoin d'un mot-clé pour cela, car vous pourriez utiliser n'importe quelle autre instruction qui ne fait rien (par exemple, 0une instruction parfaitement valide qui n'a pas d'effet), mais avoir un mot-clé pour cela vous permet d'être plus explicite de ne vouloir rien faire.
Sven Marnach

@SvenMarnach est-il mal vu stylistiquement pour traiter les exceptions avec pass?
3pitt

@MikePalmice Pas du tout.
Matt M.

73

Oui, il y a une différence. continueforce la boucle à démarrer à la prochaine itération tandis que passsignifie "il n'y a pas de code à exécuter ici" et continuera à travers le reste ou le corps de la boucle.

Exécutez-les et voyez la différence:

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

continueva revenir en haut de la boucle. passcontinuera le traitement.

si le passage est à la fin de la boucle, la différence est négligeable car le flux reviendrait tout de même au sommet de la boucle.


11

Dans votre exemple, il n'y aura aucune différence, car les deux instructions apparaissent à la fin de la boucle. passest simplement un espace réservé, en ce sens qu'il ne fait rien (il passe l' exécution à l'instruction suivante). continue, d'autre part, a un but précis: il dit à la boucle de continuer comme si elle venait de redémarrer.

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

est très différent de

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

6

Il y a une différence entre eux,
continueignore l'itération actuelle de la boucle et exécute l'itération suivante.
passne fait rien. Il s'agit d'un espace réservé de déclaration vide.
Je préfère vous donner un exemple, qui clarifiera mieux cela.

>>> 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

Oui, il y a une différence. Continuesaute en fait le reste de l'itération actuelle de la boucle (retour au début). Passest une déclaration vide qui ne fait rien.

Voir les documents python


4

Dans ces exemples, non. Si l'instruction n'est pas la toute dernière de la boucle, alors ils ont des effets très différents.


3

Différence entre passer et continuer dans une boucle for:

Alors pourquoi passer en python?

Si vous souhaitez créer une classe, une méthode ou un bloc vide.

Exemples:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

sans 'pass' dans les exemples ci-dessus, lancera 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."

La sortie est

>>> This statement is from pass.

Encore une fois, laissez exécuter le même code avec des modifications mineures.

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."

La sortie est -

>>> 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.

Pass ne fait rien. Le calcul n'est pas affecté. Mais continuer revient en haut de la boucle pour procéder au prochain calcul.


3
Quelle est la différence particulière avec les autres réponses déjà disponibles?
BHUVANESH MOHANKUMAR

1

Considérez-le de cette façon:

Pass: Python fonctionne uniquement sur l'indentation! Il n'y a pas d'accolades vides, contrairement aux autres langues.

Donc, si vous ne voulez rien faire au cas où une condition est vraie, il n'y a pas d'autre option que passer.

Continuer: Ceci n'est utile qu'en cas de boucles. Dans le cas, pour une plage de valeurs, vous ne voulez pas exécuter les instructions restantes de la boucle après que cette condition est vraie pour cette passe particulière, alors vous devrez utiliser continue.


Donc, si vous ne voulez rien faire si une condition est vraie, il n'y a pas d'autre option que passer -> ce n'est pas exact, voir par exemple le commentaire de Sven Marnach ci-dessus.
patrick

1
@patrick Désolé, mais il a raison. Dans le cas où, par exemple, une variable peut être à la fois un flottant et un int, et que vous souhaitez effectuer une opération sur tous les entiers, vous pouvez simplement utiliser une instruction if qui vérifie les flottants, utilisez un passsi l'instruction est Trueet effectuez l'opération si elle l'est False. Cela permet une analyse efficace des listes polyvalentes.
1313e le

0

passpourrait être utilisé dans des scénarios lorsque vous avez besoin de fonctions, de classes ou de boucles vides pour de futures implémentations, et qu'il n'y a aucune exigence d'exécution de code.
continueest utilisé dans les scénarios où non lorsqu'une condition est remplie dans une boucle et que vous devez ignorer l'itération en cours et passer à la suivante.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.