如何获得我在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