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