如何获得我在python中if条件中使用的函数的值?

问题描述:

我该如何获得我用来触发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)) 

赋值不会在Python中返回值。它实际上不是一个表达式,而是一个陈述,所以它总是必须是独立的。那永远不会改变。这主要是Python开发人员的设计决定;他们发现C语言中的这种特殊语言使得代码不易读取,因此被忽略了(也有人猜测它被排除在外,以避免===之间的混淆,但我不会购买)。

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

你根本无法在Python这

ban = is_a_banana(v) 

做到这一点beause是一个声明,而不是表达,因而不返回,你可以检查的值。

保持它是如何,因为它不仅是可读的,但它也可以工作。

你应该这样做:简单地指定一个变量并查看变量的值。

可以做这样的事情:

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()缓存它计算的值呢?

更新:其他答案满意的解释,为什么你可以直接在Python想要什么不能做 - 我说这只是表明,仅计算每个比最小次数版本(所以仍然有不错的表现)仍然是可读的和明确的...

就个人而言,我认为这是相当清楚的:

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

也许这可以通过启用内部函数(或装饰缓存等处理):

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