2013-03-14 23 views
5
>>> def foo(a): 
     print "called the function" 
     if(a==1): 
      return 1 
     else: 
      return None 
>>> a=1 

>>> if(foo(a) != None and foo(a) ==1): 
    print "asdf" 

called the function 
called the function 
asdf 

Hallo. Wie kann ich vermeiden, die Funktion zweimal aufzurufen, ohne eine zusätzliche Variable zu verwenden?Python wenn Bedingung und "und"

+1

Sie das Ergebnis 'foo speichern kann (a) 'in eine Variable. Überprüfen Sie dann den Variablenwert in der Klausel 'if() '. – Raptor

+5

if (foo (a) == 1): – jimifiki

+1

Genau, wenn die zweite Bedingung "True" ist, muss die erste sein. Beachten Sie auch, dass Klammern in der Bedingung in Python als schlechte Form angesehen werden. 'if (a == 1):' sollte nur 'sein, wenn a == 1:'. –

Antwort

12

können Sie die Kette die Vergleiche wie diese

if None != foo(a) == 1: 

Dies funktioniert wie

if (None != foo(a)) and (foo(a) == 1): 

außer dass es wertet nur foo (a) einmal.

+0

Sie können ** Gleichheit ** Vergleiche ketten? Sieh dir das an! – slezica

+0

@ uʍop ǝpısdn, yep es funktioniert das gleiche (mit einem impliziten 'und') als die anderen Vergleiche in Ihrer Antwort –

+2

Während dies eine gute _general_ Antwort ist, ist die erste Prüfung in dem gegebenen Fall immer noch redundant. –

7

Wie kann ich vermeiden, die Funktion zweimal aufzurufen, ohne eine zusätzliche Variable zu verwenden? Hier

, können Sie einfach ersetzen

if(foo(a) != None and foo(a) ==1): 

mit

if foo(a) == 1: 

Die foo(a) != None ist überflüssig: Wenn foo(a) == 1, es garantiert nicht None sein.

+0

Vielleicht ist der gepostete Code nicht der echte Code, sondern nur ein Beispiel. if (foo (a)! = Keine und foo (a) == 1): klingt als eine bessere Lösung – jimifiki

+1

@jimifiki Wenn die Funktion Nebenwirkungen hat, könnte das zu Problemen führen. Außerdem ist dies die beste Antwort auf die gestellte Frage. Wenn das OP es zu stark vereinfacht hat, muss er eine neue Frage stellen. –

+0

Dies beantwortet die Frage nicht. Ich stimme @jimifiki zu. Und nein, es ist nicht das Beste, siehe unten – slezica

1

Die folgende Anweisung

if foo(a) == 1: 

mit beiden Bedingungen beschäftigen.

+0

Warum der Downvote? Bitte erkläre. –

1

wenn foo (a) == 1, dann wird foo (a) Keine nicht sein,

so vereinfachen Ihren Code:

if foo(a): 
    print('asdf') 
+0

Angenommen, er meint "Jeder Wert, der sich als wahr erweist" ist ein bisschen zweifelhaft, denke ich. –

+0

Ich glaube nicht, dass hier ein Unterschied zwischen if foo (a) und if foo (a) == 1 besteht. –

Verwandte Themen