web-dev-qa-db-fra.com

Exemple d'utilisation de l'instruction "continue" en Python?

Le définition de l'instruction continue est:

L'instruction continue continue à la prochaine itération de la boucle.

Je ne trouve pas de bons exemples de code.

Quelqu'un pourrait-il suggérer quelques cas simples où continue est nécessaire?

160
JohnG

Voici un exemple simple:

for letter in 'Django':    
    if letter == 'D':
        continue
    printf("Current Letter: {letter}")

La sortie sera:

Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o

Il continue à la prochaine itération de la boucle.

201
Snehal Parmar

J'aime utiliser continuer dans les boucles où il y a beaucoup de situations à remplir avant que vous ne soyez "au travail". Donc au lieu d'un code comme celui-ci:

for x, y in Zip(a, b):
    if x > y:
        z = calculate_z(x, y)
        if y - z < x:
            y = min(y, z)
            if x ** 2 - y ** 2 > 0:
                lots()
                of()
                code()
                here()

Je reçois un code comme celui-ci:

for x, y in Zip(a, b):
    if x <= y:
        continue
    z = calculate_z(x, y)
    if y - z >= x:
        continue
    y = min(y, z)
    if x ** 2 - y ** 2 <= 0:
        continue
    lots()
    of()
    code()
    here()

En procédant ainsi, j'évite le code très profondément imbriqué. En outre, il est facile d’optimiser la boucle en éliminant d’abord les cas les plus fréquents, de sorte que je n’ai à traiter que des cas peu fréquents mais importants (par exemple, le diviseur est 0) quand il n’ya pas d’autre obstacle.

100
Lauritz V. Thaulow

Habituellement, continuer est nécessaire/utile lorsque vous souhaitez ignorer le code restant dans la boucle et poursuivre l'itération.

Je ne crois pas vraiment que ce soit nécessaire, car vous pouvez toujours utiliser les instructions if pour fournir la même logique, mais il peut être utile d'améliorer la lisibilité du code.

17
pcalcao
import random  

for i in range(20):  
    x = random.randint(-5,5)  
    if x == 0: continue  
    print 1/x  

continue est une déclaration de contrôle extrêmement importante. Le code ci-dessus indique une application typique où le résultat d’une division par zéro peut être évité. Je l'utilise souvent lorsque j'ai besoin de stocker la sortie de programmes, mais je ne veux pas stocker la sortie si le programme s'est écrasé. Remarque, pour tester l'exemple ci-dessus, remplacez la dernière instruction par print 1/float (x), ou vous obtiendrez des zéros chaque fois qu'il y a une fraction, puisque randint renvoie un entier. Je l'ai omis pour plus de clarté.

12
user1871712

Certaines personnes ont commenté la lisibilité en disant "Oh, ça n'aide pas beaucoup à la lisibilité, qui s'en soucie?"

Supposons que vous ayez besoin d’une vérification avant le code principal:

if precondition_fails(message): continue

''' main code here '''

Notez que vous pouvez faire ceci after le code principal a été écrit sans le changer de toute façon. Si vous différez le code, seule la ligne ajoutée avec "continuer" sera mise en surbrillance puisqu'il n'y a aucune modification d'espacement dans le code principal.

Imaginez si vous devez faire un petit déjeuner avec le code de production, ce qui revient simplement à ajouter une ligne avec continue. Il est facile de voir que c'est le seul changement lorsque vous relisez le code. Si vous commencez à insérer le code principal dans if/else, diff mettra en surbrillance le code nouvellement mis en retrait, à moins que vous n'ignoriez les changements d'espacement, ce qui est dangereux, notamment en Python. Je pense que si vous n'avez pas été amené à déployer du code très rapidement, vous ne l'apprécieriez peut-être pas beaucoup.

9
C S
def filter_out_colors(elements):
  colors = ['red', 'green']
  result = []
  for element in elements:
    if element in colors:
       continue # skip the element
    # You can do whatever here
    result.append(element)
  return result

  >>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
  ['lemon', 'orange', 'pear']
5
ILYA Khlopotov

Disons que nous voulons imprimer tous les nombres qui ne sont pas des multiples de 3 et 5

for x in range(0, 101):
    if x % 3 ==0 or x % 5 == 0:
        continue
        #no more code is executed, we go to the next number 
    print x
4
ytpillai

Ce n'est pas absolument nécessaire car cela peut être fait avec des FI, mais c'est plus lisible et moins coûteux en temps d'exécution.

Je l'utilise afin de sauter une itération dans une boucle si les données ne répondent pas à certaines exigences:

# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]

for time in commit_times:
    hour = time[0]
    minutes = time[1]

    # If the hour is not between 0 and 24
    # and the minutes not between 0 and 59 then we know something is wrong.
    # Then we don't want to use this value,
    # we skip directly to the next iteration in the loop.
    if not (0 <= hour <= 24 and 0 <= minutes <= 59):
        continue

    # From here you know the time format in the tuples is reliable.
    # Apply some logic based on time.
    print("Someone commited at {h}:{m}".format(h=hour, m=minutes))

Sortie:

Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45

Comme vous pouvez le constater, la mauvaise valeur ne l'a pas fait après l'instruction continue.

3
Bastian

Par exemple, si vous voulez faire différentes choses en fonction de la valeur d'une variable:

for items in range(0,100):
    if my_var < 10:
        continue
    Elif my_var == 10:
        print("hit")
    Elif my_var > 10:
        print("passed")
    my_var = my_var + 1

Dans l'exemple ci-dessus, si j'utilise break, l'interprète ignorera la boucle. Mais avec continueit, il ne fait que sauter les instructions if-Elif et aller directement à l'élément suivant de la boucle.

2
jonathan.hepp