1
votes

Différence entre if: else: et if: continue

Disons que j'ai un itérable: boules. Je veux faire quelque chose à toutes les balles de cette boucle qui ne sont pas bleues. D'après ce que je vois, j'ai deux options:

Utilisation de if: else:

for ball in balls:
    if ball.blue:
        # can do something with blue ball
        continue
    # now execute code for all balls that are not blue

Utilisation de if: continue strong>

for ball in balls:
    if ball.blue:
        # can do something with blue ball
    else:
        # now execute code for all balls that are not blue

Pour moi, il n'y a aucune différence dans ce qui peut être réalisé avec ces deux structures. Y a-t-il une différence voulue? Y a-t-il des cas où l'un est plus rapide, plus lisible, etc.?


5 commentaires

pourquoi pensez-vous que l'utilisation de mots-clés différents devrait nécessairement conduire à des résultats différents


pas de différence pour un exemple aussi simple - parfois je préfère l'idiome continue pour éviter une autre couche d'indentation, mais c'est assez subjectif


Je pense que c'est une question de préférence. J'ajouterais l'option sinon ball.blue: sans autre ou continuer.


c'est subjectif, s'il y avait des conseils ou des documents PEP, je dirais de suivre cela, mais sinon c'est une question de goût pour des exemples aussi triviaux


... faites quelque chose à tous ... qui ne sont pas bleus ... Vous avez laissé une autre option: sinon ball.blue: faites des choses - pas besoin de < code> pass ou continue .


6 Réponses :


0
votes

Dans le cas que vous avez montré, il n'y a pas de différence car il n'y a pas de logique après l'instruction if-else. Généralement, continue est utilisé pour passer à une autre itération de la boucle for, donc dans le cas suivant, vous ne seriez pas capable de le traduire aussi facilement:

for ball in balls:
    if ball.blue:
        # can do something with blue ball
    else:
        # now execute code for all balls that are not blue
    # here some logic

remplacerait else par continue à la fin de si , la dernière ligne ne serait pas atteinte.


2 commentaires

Un commentaire sur le vote négatif?


Je n'ai pas voté contre, mais peut-être que votre exemple pourrait être clarifié en démontrant l'utilisation de continue dans votre extrait de code?



1
votes

Je pense que cela devrait dépendre de ce que vous faites aux balles. Si vous faites quelque chose de similaire, disons en changeant la taille des boules et vous voulez que les bleues aient une certaine taille et que toutes les autres soient d'une autre taille que j'utiliserais si / sinon. Si ce que vous faites est conceptuellement différent, j'utiliserais l'exemple de suite.

Si votre objectif est de ne faire quelque chose que sur la boule bleue, vous devez simplement écrire:

for ball in balls:
    if not ball.blue:
        # do what you want to balls that aren't blue.

p >


0 commentaires

1
votes

Habituellement, nous ne mettons pas d'instructions en utilisant continue , ce qui signifie qu'une condition spécifique ramène simplement le curseur à la prochaine ronde d'itération de la boucle for (sans rien faire si aucune action n'est mentionnée).

Lorsqu'une condition normale if , else est utilisée pour des conditions simplement vraies et fausses, condition in if satisfait puis exécutez ses instructions sinon allez au bloc else et exécutez ses instructions alors.


1 commentaires

en désaccord, aucune raison pour laquelle continue ne devrait pas être poursuivi par d'autres choses. de toute façon, ne répondez pas avant d'avoir fini de conduire!



1
votes

Pour moi, il n'y a aucune différence dans ce qui peut être réalisé avec ces deux structures. Y a-t-il une différence voulue? Y a-t-il des cas où l'un est plus rapide, plus lisible, etc.

Il n'y a aucune différence dans le fonctionnement du code. continuer revient essentiellement à mettre tout ci-dessous dans else .

Mais si cette partie else est longue ou utilise beaucoup de niveaux d'indentation, et peut-être quelques boucles par elle-même, continue et break enregistrez beaucoup d'espace et permet une gestion des flux plus facile!

Par exemple imaginez avoir beaucoup de cas, vous devez sauter l'entrée. Cela demande if / else ou continue . Par exemple. vérifiez si une propriété existe - sinon, ignorez le reste pour cet élément. Ensuite, vérifiez sa valeur - si c'est quelque chose d'étrange, sautez à nouveau ... Cela pourrait rendre beaucoup de niveaux d'indentation ou d'étendues difficiles à gérer. contunue évite des maux de tête.

De plus, si vous avez déjà écrit du code et que vous vous êtes rendu compte que plus tard, vous avez des cas de bordure, vous pouvez ajouter un élément similaire 'skip' au début de la boucle et ne pas indenter le reste. Les changements d'indentation apparaissent dans git (sauf si vous configurez autrement). Dans les langues où l'indentation est importante, ces «modifications» qui ne font rien peuvent prêter à confusion lorsque vous parcourez ultérieurement vos commits ou ceux de quelqu'un d'autre.


0 commentaires

0
votes

La seule connexion entre continue et si est que vous avez généralement une condition pour décider si vous voulez continuer . continue est utilisé pour terminer une seule itération d'une boucle, comme la boucle for dans votre exemple, sans quitter la boucle entière ( break fait cette). Étant donné que l'une ou l'autre des branches termine également l'itération, vous n'avez aucune différence pratique dans cet exemple.

for ball in balls:
    if ball.blue:
        pass
    elif ball.red:
        pass
    else:
        pass

    if ball.static:
        continue

    ball.process_physics()

Tout chemin d'exécution de branchement pourrait être transformé en une autre structure, telle que sinon ball.static: ball.process_physics () , mais le continue nous informe qu'il ne peut pas y avoir quelque chose comme un else plus bas pour faire plus de travail dans cette itération. C'est une aide pour savoir que le chemin d'exécution se replie sur la boucle. (Il pourrait y avoir des choses comme des blocs enfin , mais nous aurions vu essayer s'il y en avait.)


0 commentaires

0
votes

La méthode la plus simple, la plus simple et la plus directe est:

...
if not ball.blue:
   ...


0 commentaires