'Enfin' équivalent pour les instructions If / Elif en Python
Python ont une finally
équivalent pour ses if/else
états, semblable à ses try/except/finally
déclarations? Quelque chose qui nous permettrait de simplifier ce:
if condition1:
do stuff
clean up
elif condition2:
do stuff
clean up
elif condition3:
do stuff
clean up
...
...
:
if condition1:
do stuff
elif condition2:
do stuff
elif condition3:
do stuff
...
...
finally:
clean up
Où finally
ne serait appelé seulement après qu'une condition est remplie et son "faire des trucs" exécuter? A l'inverse, si aucune condition n'est remplie, l' finally
code n'est pas exécuté.
J'ai hate de le bec sur le blasphème, mais la meilleure façon dont je peux le décrire, c'est l'existence d'un GOTO
déclaration à la fin de chaque bloc de "faire les choses" qui conduit à finally
.
Essentiellement, il fonctionne comme le contraire d'un else
déclaration. Alors que else
n'est exécutée que si pas d'autres conditions sont remplies, ce serait être exécuté UNIQUEMENT SI une autre condition a été remplie.
source d'informationauteur nobillygreen | 2014-02-06
Vous devez vous connecter pour publier un commentaire.
Il peut être fait totalement non-hackily comme ceci:
À certains égards, pas aussi pratique, que vous devez utiliser une fonction distincte. Cependant, la bonne pratique de ne pas le faire trop longtemps les fonctions, de toute façon. La séparation de la logique en petits facilement lisible (généralement de maximum 1 page) les fonctions de test, de documenter et de comprendre les flux d'exécution est beaucoup plus facile.
Une chose d'être conscient, c'est que le
finally
clause ne sera pas obtenir de l'exécuter en cas d'exception. Pour faire ainsi, vous devez ajoutertry:
trucs là.Votre logique est semblable à ceci:
Moche, mais c'est ce que vous avez demandé
Une autre suggestion, qui pourrait vous convenir si les conditions sont pré-calculés.
Ce serait une douleur si vous étiez l'évaluation des conditions dans le cadre de votre si déclarations, parce que dans ce cas, vous devez évaluer une seconde fois pour le
any
fonction...à moins que Python est plus intelligent que je ne le réalisent.La réponse de mhlester a code répétitif, une version améliorée pourrait être comme suit:
Est cette horrible?
Comment à ce sujet?
Honnêtement, je déteste ces deux
Comme ceci:
Mises en garde sont bien sûr que votre condition clés doivent être uniques. Vous pouvez contourner ce problème en ayant un ordre de priorité hiérarchie des actions dicts.
Un peu en retard à la fête, mais la question a été actif.
Habituellement je voudrais faire un gestionnaire de contexte comme ce
Et puis vous pouvez l'utiliser comme cette