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

嗨。我如何避免两次调用函数而不使用额外的变量。蟒蛇如果条件和“和”

+1

可以节省的foo'的结果(一) '变成一个变量。然后检查'if()'子句中的变量值。 – Raptor 2013-03-14 11:25:32

+5

if(foo(a)== 1): – jimifiki 2013-03-14 11:25:37

+1

确切地说,对于第二个条件为“真”,第一个必须是。还要注意,条件周围的括号在Python中被认为是不好的形式。 '如果(a == 1):'应该是'如果a == 1:'。 – 2013-03-14 11:26:18

回答

12

你可以连这样

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

攀比这就像

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

但它仅(一)一次评估FOO。

+0

你可以链**等于**比较?那么,看看那个! – slezica 2013-03-14 11:27:32

+0

@uʍopǝpısdn,是的,它的作用与你的回答中的其他比较一样(带有隐含的'和') – 2013-03-14 11:28:45

+2

虽然这是一个很好的_general_答案,但在给定的情况下,第一个检查仍然是多余的。 – 2013-03-14 11:29:54

7

我该如何避免两次调用函数而不使用额外的变量。

在这里,你可以简单地用

if foo(a) == 1: 

foo(a) != None更换

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

是多余的:如果foo(a) == 1,可以保证它不会None

+0

也许发布的代码不是真正的代码,只是一个例子。如果(foo(a)!= None和foo(a)== 1): 听起来更好的解决方案 – jimifiki 2013-03-14 11:27:42

+1

@jimifiki如果函数有副作用,那可能会导致问题。此外,这是所问问题的最佳答案。如果OP过度简化了它,那么他需要提出一个新问题。 – 2013-03-14 11:28:25

+0

这不是回答这个问题。我同意@jimifiki。不,这不是最好的,看下面 – slezica 2013-03-14 11:28:32

1

下面的语句

if foo(a) == 1: 

会处理这两个条件。

+0

为什么downvote?请解释。 – 2013-03-14 11:33:17

1

检查foo(一)== 1,则FOO(一)将不会为无,

因此简化代码:

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

假设他的意思是“任何评估为真的值”都是有点狡猾的,我想。 – 2013-03-14 13:38:56

+0

我不认为如果foo(a)和if foo(a)== 1在这里是有区别的。 – 2013-03-14 14:31:40