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

Hi. Как я могу избежать вызова функции дважды без использования дополнительной переменной.python if condition and "and"

+1

вы можете сохранить результат 'Foo (а) 'в переменную. Затем проверьте значение переменной в разделе 'if()'. – Raptor

+5

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

+1

Точно, для второго условия должно быть «Истина», первая должна быть. Также обратите внимание, что скобки вокруг условия считаются плохими в Python. 'if (a == 1):' должно быть просто 'if a == 1:'. –

ответ

12

Вы можете приковать сравнений, как этот

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

Это работает как

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

за исключением того, что он оценивает только Foo (а) один раз.

+0

Вы можете связать ** равенство ** сравнения? Ну, посмотри на это! – slezica

+0

@ uʍop ǝpısdn, yep он работает одинаково (с неявным 'и'), как и другие сравнения в вашем ответе –

+2

Хотя это хороший ответ _general_, первая проверка по-прежнему избыточна в данном случае. –

7

Как я могу избежать вызова функции дважды без использования дополнительной переменной.

Здесь вы можете просто заменить

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

с

if foo(a) == 1: 

foo(a) != None избыточен: если foo(a) == 1, он гарантированно не будет None.

+0

Возможно, опубликованный код не является реальным кодом, а просто примером. if (foo (a)! = None и foo (a) == 1): звучит как лучшее решение – jimifiki

+1

@jimifiki Если функция имеет побочные эффекты, это может вызвать проблемы. Кроме того, это лучший ответ на заданный вопрос. Если ОП чрезмерно упростит его, то ему нужно задать новый вопрос. –

+0

Это не отвечает на вопрос. Я согласен с @jimifiki. И нет, это не самое лучшее, см. Ниже – slezica

1

следующее заявление

if foo(a) == 1: 

будет иметь дело с обоими условиями.

+0

Почему downvote? Пожалуйста, объясни. –

1

если Foo (а) == 1, то Foo (а) не будет не None,

так упростить код:

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

Предполагая, что он означает «Любое значение, которое оценивается как истинное», я думаю, немного изворотливый. –

+0

Я не думаю, что есть разница между if foo (a) и if foo (a) == 1 здесь. –