1
votes

Comment capturer la valeur de retour de la fonction avec la condition if

def func1():
    if my_api_success():
        return my_api_value
    else
        return None

x= 1 if func1() is None else func1()
I want to capture the return value of func1().
Is it possible to write an one line code, with out calling func1() twice?

5 commentaires

Il l'appelle définitivement deux fois. Il y en a cependant. Vous pouvez faire x = func1 () ou 1 .


pourquoi ne pas utiliser simplement deux lignes? Je ne vois aucune bonne raison. Python 3.8 aura des expressions d'affectation, ce qui permettra cela. Utilisez donc Python 3.8 ou utilisez simplement deux lignes. Même si vous utilisez Python 3.8, vous ne devriez probablement utiliser que deux lignes.


@CharlieWindolf: Seulement si toutes les valeurs possibles de my_api_value sont véridiques. ou serait faux si func1 () pouvait renvoyer 0 ou d'autres valeurs fausses.


C'est un bon point. Donc, oui, probablement deux lignes sont meilleures.


func1 doit déclencher une exception en cas d'échec, sans renvoyer None .


3 Réponses :


3
votes

Si vous utilisez Python 3.8, vous pouvez utiliser une expression d'affectation:

x = next(1 if value is None else value for value in (func1(),))

Si vous utilisez une version antérieure de Python, vous pouvez utiliser le code next > fonction avec une expression de générateur qui itère sur un 1-tuple de func1 () pour obtenir le même effet d'une expression d'affectation:

x = 1 if (value := func1()) is None else value


0 commentaires

0
votes

La meilleure façon de faire serait de suivre ce que @CharlieWindolf a suggéré d'utiliser:

x = 1 if (y := func1()) is None else y

Le problème avec ceci est que cela nécessite func1 () code> pour renvoyer une valeur que python traite comme un booléen.

Pour résoudre ce problème, vous devez utiliser deux lignes.

y = func1()
x = 1 if y is None else y

Dans Python3.8, cela peut être possible en utilisant un expression d'affectation mais je ne l'ai pas encore testé.

x = func1() or 1


0 commentaires

0
votes

Pourquoi ne pas simplement renvoyer la valeur pour laquelle vous essayez de vérifier la condition dans le cas de Aucune.

ou vous pouvez simplement: X = func1 ()
si X est nul X = 1


0 commentaires