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

时间:2011-03-22 16:21:46

标签: python

如何获取我用于在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))

5 个答案:

答案 0 :(得分:4)

更新:其他答案令人满意地解释了为什么你不能直接在Python中做你想做的事情 - 我添加这个只是为了表明一个版本只计算每个比例的最小次数(所以仍然有很好的表现)仍然可读且清晰......

我个人认为这很清楚:

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

答案 1 :(得分:3)

赋值不会在Python中返回值。它实际上不是一个表达,而是一个声明,所以它总是必须是它本身。这永远不会改变。它主要是Python开发人员的设计决策;他们发现C语中的特定习语使代码的可读性降低,因此被忽略了(还有一些猜测是为了避免===之间的混淆,但是我不这么认为)。

如果你愿意,你可以写第二个表格,或者你可以用不同的方式来做你需要的。

答案 2 :(得分: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()缓存它计算的值?

答案 3 :(得分:0)

你无法在Python中做到这一点

ban = is_a_banana(v)

是一个语句,而不是表达式,因此不会返回您可以检查的值。

保持原样,因为它不仅可读,而且还有效。

答案 4 :(得分: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