en Perl, il est assez courant de faire des choses comme Comment peut-il être facilement implémenté dans Python? P> Mise à jour forte> p> Exemples (pseudocode) : p> si possible Les solutions doivent fonctionner avec Python 2.5 + P> Remarque: il existe une hypothèse implicite que vous ne pouvez pas modifier le fonctionnement () pour soulever des exceptions , ni écrire des emballages. p> p> fonction () || alternative () code>. Si le premier retourne Faux, il fonctionnera le second.
4 Réponses :
function() or alternative() The mechanism is exactly the same.
Vous pouvez utiliser aussi, il y a une expression conditionnelle définie dans PEP 308 : P> ou code>:
x = 5 if condition() else 0
Utiliser si ou code>: Python utilise Évaluation du court-circuit pour expressions booléennes:
fonction code> returient vrai, la valeur finale de cette expression est déterminée et
alternative code> n'est pas du tout évalué. p> p>
Est-il possible de faire quelque chose comme résultat = fonction () ou d'impression (résultat) code>?
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 code>, je soupçonne que ce qui est recherché est quelque chose comme
(résultat = fonction ((résultat)) ou (résultat)) code> 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 = code> dans une instruction Python signifie qu'il s'agit d'une déclaration d'affectation, mais de la gauche du
= code> n'est pas une expression et une expression peut " t contient un
= code>.
Essayez avec Malheureusement, cela ne fonctionne pas comme dans Perl, car à Perl, après une affectation comme ou code>:
My $ C = $ D || 45; code> vous avez dans
$ C code> la valeur 45 si
$ d code> est indéfini. Dans Python, vous obtenez une erreur
nomError: nom 'd' n'est pas définie code> p> p>
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.