2013-03-14 8 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 

こんにちは。 私は余分な変数を使用せずに関数を2回呼び出すことを避けることができます。条件付きのPythonと "and"

+1

'を変数に変換します。次に、 'if()'節で変数の値をチェックします。 – Raptor

+5

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

+1

正確には、第2の条件が「真」であるためには、第1の条件が成立する必要があります。また、条件のまわりの括弧は、Pythonでは悪い書式とみなされます。 'if(a == 1):'は 'a == 1:'ならば ''でなければなりません。 –

答えて

12

あなたはこれが、それは一度だけのfoo(A)を評価することを除いて

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

のように動作します。この

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

のような比較をチェーンすることができます。

+0

**等価**比較をチェーンできますか?さて、それを見て! – slezica

+0

@uʍopǝpısdn、それはあなたの答えの他の比較と同じ(暗黙の 'と')と同じように動作します –

+2

これは良い_general_答えですが、最初のチェックは与えられた場合にはまだ重複しています。 –

7

余分な変数を使用せずに関数を2回呼び出すことを避けるにはどうすればよいですか。ここで

、あなたは単に

if foo(a) == 1: 

foo(a) != None

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

を置き換えることができます冗長である:foo(a) == 1あれば、Noneではないことが保証されます。

+0

投稿されたコードは実際のコードではなく単なる例です。 if(foo(a)!= Noneおよびfoo(a)== 1):がより良い解決策として聞こえます。 – jimifiki

+1

@jimifiki機能に副作用があると、問題が発生する可能性があります。また、これは質問された質問に対する最良の答えです。 OPが過度に簡略化した場合、新しい質問をする必要があります。 –

+0

これは質問に答えていません。 @jimifikiに同意します。そしてそれは最善ではない、以下を参照してください – slezica

1

次の文

if foo(a) == 1: 

は、両方の条件を扱います。

+0

なぜdownvote?説明してください。 –

1

のfoo(A)== 1の場合、fooは(a)はNoneにない場合は、

そうにあなたのコードを簡素化:あなたは(a)の `FOOの結果を保存することができます

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

彼が「真であると評価されるすべての値」が少しばかげていると考えると、私は思います。 –

+0

ここではfoo(a)とfoo(a)== 1の違いはないと思います。 –