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