7
votes

L'équivalent python de l'idiome de Perl fait ceci ou cela, généralement appelé "ou mourir"?

en Perl, il est assez courant de faire des choses comme fonction () || alternative () . Si le premier retourne Faux, il fonctionnera le second.

Comment peut-il être facilement implémenté dans Python?

Mise à jour

Exemples (pseudocode) : xxx

si possible Les solutions doivent fonctionner avec Python 2.5 +

Remarque: il existe une hypothèse implicite que vous ne pouvez pas modifier le fonctionnement () pour soulever des exceptions , ni écrire des emballages.


2 commentaires

80% du temps c'est une idée terrible. Dans Perl, cela dépend presque toujours des effets secondaires impliqués ou dissimulés dans les fonctions. En outre, l'équivalent Python ne fonctionne que si des exceptions sont ignorées ou silencieuses. Veuillez fournir votre code Python où vous souhaitez utiliser cela. Il peut cacher des problèmes de manutention d'exception plus graves.


Bien que vous puissiez faire cela, nous devrions souligner que c'est inhabituel dans le code Python. Nous utilisons généralement des exceptions pour gérer des situations inattendues.


4 Réponses :


1
votes
function() or alternative()
The mechanism is exactly the same.

0 commentaires

2
votes

Vous pouvez utiliser ou code>: xxx pré>

aussi, il y a une expression conditionnelle définie dans PEP 308 : P>

x = 5 if condition() else 0


0 commentaires

5
votes

Utiliser ou : Python utilise Évaluation du court-circuit pour expressions booléennes: xxx

si fonction returient vrai, la valeur finale de cette expression est déterminée et alternative n'est pas du tout évalué.


5 commentaires

Est-il possible de faire quelque chose comme résultat = fonction () ou d'impression (résultat) ?


Vous pouvez le faire à Python 3.x. Dans Python 2.x "Imprimer" n'est pas une fonction mais une déclaration. Donc, si la fonction () renvoie une valeur qui évalue à FALSE, le résultat sera imprimé et étant donné que l'impression ne renvoie aucun, la valeur du "résultat" sera "Aucun"


@rocksportrocker Considérant la référence à perl , je soupçonne que ce qui est recherché est quelque chose comme (résultat = fonction ((résultat)) ou (résultat)) Je ne pense pas Ce python permet à ces types d'attrapités.


@Jameskanze: Oui, cela ne fonctionne pas en python car l'opération d'affectation ne renvoie aucune valeur, comme dans Perl ou C / C ++


@rocksportrocker ou formulé plus précisément: l'affectation n'est pas un opérateur en python. La présence d'un = dans une instruction Python signifie qu'il s'agit d'une déclaration d'affectation, mais de la gauche du = n'est pas une expression et une expression peut " t contient un = .



1
votes

Essayez avec ou : xxx

Malheureusement, cela ne fonctionne pas comme dans Perl, car à Perl, après une affectation comme My $ C = $ D || 45; vous avez dans $ C la valeur 45 si $ d est indéfini. Dans Python, vous obtenez une erreur nomError: nom 'd' n'est pas définie


0 commentaires