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