Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取函数i';我在python中的if条件中使用?_Python - Fatal编程技术网

如何获取函数i';我在python中的if条件中使用?

如何获取函数i';我在python中的if条件中使用?,python,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 但我正试图以一

在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)
是一个语句,而不是表达式,因此它不会返回一个可以检查的值


保持原样,因为它不仅可读,而且还能工作。

你应该用简单的方法来做:显式地分配给变量,并查看变量的值

你可以这样做:

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