2010-10-20 4 views
1

Cela semble très verbeux, en particulier avec les noms de fonction longs, y at-il une meilleure façon de le faire en Python?Définir une variable égale au résultat si le résultat existe

if someRandomFunction(): 
    variable = someRandomFunction() 

Edit: Pour plus variable de contexte n'est pas déjà défini, et ce sera un nouveau nœud sur un arbre. Je veux seulement créer ce noeud si someRandomFunction() retourne une valeur. Et someRandomFunction() est censé renvoyer la représentation sous forme de chaîne d'un nœud à partir d'un type d'arbre différent.

+0

pourquoi ne pouvez-vous faire juste var = someFunc() puis vérifiez var pour None? – jbreed

+2

Pourquoi voudriez-vous ** laisser ** la variable indéfinie? Quelle raison pouvez-vous donner pour cela? 'variable = someRandomFunction()' a du sens. L'instruction 'if' n'a aucun sens. S'il vous plaît fournir une raison pour laquelle vous laissez une variable indéfinie! –

+1

@jawonlee: Vraisemblablement 'variable' devrait être inchangé si' someRandomFunction() 'renvoie une valeur falsifiée. –

Répondre

13

Pouvez-vous:

variable = someRandomFunction() or variable 

Voir Boolean Operations dans la documentation Python pour plus d'informations.

+0

Voilà la solution que j'aime. Je pense que ça se lit plutôt bien. – kindall

+3

Il n'est pas clair à partir de la question comme indiqué si 'variable' est encore défini avant que cette ligne de code soit exécutée. Si 'someRandomFunction()' est évalué à False, cela déclenche une exception NameError car la variable n'est pas encore définie. – snapshoe

+0

@ ma3204: Je pense que nous devons supposer qu'il est déjà défini, car si ce n'est pas le cas et 'someRandomFunction' renvoie false, alors tout code qui utiliserait' variable' par la suite donnerait aussi un 'NameError' dans le code original. –

6
temp= someRandomFunction() 
if temp: 
    variable = temp 
-1

(Apparemment, vous pouvez pas supprimer vos réponses si vous n'êtes pas inscrit.)

Ce ne sont pas les droïdes que vous cherchez ... déplacer le long ...

+1

Je ne suis pas le downvoter mystérieux, mais cela ne résout pas le problème. Il va définir 'variable' à' someRandomFunction() 'pour n'importe quelle valeur, qu'elle soit vraie ou non. De plus, à moins que 'someRandomFunction' ne soit bogué (auquel cas il devrait être corrigé, encapsulé ou remplacé), il y a peu de raisons (lire 'absolument non') de s'attendre à ce que' NameError' soit lancé ici. – aaronasterling

+0

Ah! J'ai mal lu la question en tant que "set variable au résultat de la fonction si _function_ exists", ainsi le NameError. Merci pour votre commentaire. Je vais retirer cette réponse sous peu. –

0

Un peu peu orthodoxe peut-être, mais vous pouvez modifier someRandomFunction() afin qu'il enregistre son dernier résultat dans un attribut de fonction avant de le retourner, vous pouvez alors le faire.

def someRandomFunction(): 
    ... 
    someRandomFunction.result = <...> 
    return someRandomFunction.result 

if someRandomFunction(): 
    variable = someRandomFunction.result 
0

Je ne pense pas que votre réponse soit trop verbeuse. Il dit exactement ce qu'il fait. Toutefois, étant donné que vous avez déjà dit qu'il est trop bavard pour vos goûts j'opter pour le

de = myFunc() ou approche somevariable

Questions connexes