2011-03-22 23 views
0

我該如何獲得我用來觸發if條件的函數的值?如何獲得我在python中if條件中使用的函數的值?

像...

def is_a_banana(a): 
    if a == "Banana": 
     return True 
    else: 
     return False 

v = "Banana" 

if ban = is_a_banana(v): 
    print ban 

>> True 

我知道我可以只是把它拆分成...

ban = is_a_banana(v) 
if ban: 
    print ban 

但我試圖重寫以高效的方式,使下面我可以得到函數的返回值。在PHP中,我可以將輸出綁定到一個變量,是他們用python做到這一點的方法嗎?

if s.real_quick_ratio() >= cutoff and \ 
    s.quick_ratio() >= cutoff and \ 
    s.ratio() >= cutoff: 
    result.append((s.ratio(), x)) 

回答

3

賦值不會在Python中返回值。它實際上不是一個表達式,而是一個陳述,所以它總是必須是獨立的。那永遠不會改變。這主要是Python開發人員的設計決定;他們發現C語言中的這種特殊語言使得代碼不易讀取,因此被忽略了(也有人猜測它被排除在外,以避免===之間的混淆,但我不會購買)。

如果你願意,你可以寫第二種形式,或者你可以制定一種不同的方式去做你需要的。

0

你根本無法在Python這

ban = is_a_banana(v) 

做到這一點beause是一個聲明,而不是表達,因而不返回,你可以檢查的值。

保持它是如何,因爲它不僅是可讀的,但它也可以工作。

1

你應該這樣做:簡單地指定一個變量並查看變量的值。

可以做這樣的事情:

def save(box,name,value): 
    box[name] = value 
    return value 

box = {} 
if save(box,'real_quick',s.real_quick_ratio()) >= cutoff \ 
    and save(box,'quick',s.quick_ratio()) >= cutoff \ 
    and save(box,'ratio',s.ratio()) >= cutoff: 
    # do something with box['ratio'] 

,但它的可怕。 爲什麼不只是讓s.ratio()緩存它計算的值呢?

4

更新:其他答案滿意的解釋,爲什麼你可以直接在Python想要什麼不能做 - 我說這只是表明,僅計算每個比最小次數版本(所以仍然有不錯的表現)仍然是可讀的和明確的...

就個人而言,我認爲這是相當清楚的:

if s.real_quick_ratio() >= cutoff and s.quick_ratio() >= cutoff: 
    r = s.ratio() 
    if r >= cutoff: 
     result.append((r, x)) 
0

也許這可以通過啓用內部函數(或裝飾緩存等處理):

class Factorial(object): 
    def __init__(self,arg): 
     self.arg = arg 
    @property 
    def value(self): 
     if self.arg == 1 : return 1 
     else: return self.arg * Factorial(self.arg - 1).value 

class CachedFactorial(Factorial): 
    @property 
    def value(self): 
     if not hasattr(self,'_value'): 
      self._value = super(CachedFactorial,self).value 
     return self._value 
相關問題