python

时间:2017-12-24 04:24:25

标签: python python-2.7 boolean-expression short-circuiting

我在一段python代码中有一个多部分布尔表达式,其中一部分涉及调用随机数生成器并评估二维数组之和的expoenential。由于这深埋在嵌套循环中,我想避免检查最后一个部分,如果可能的话,因为它的计算成本很高。

if self.B == 0 or (np.sign(self.B) == -sign) or (np.random.rand() < np.exp(-2*sign*self.B*np.sum(cluster))):
    do stuff

如果前两个表达式中的任何一个为真,那么随机数生成器是否仍会被调用?或者保证按顺序评估这些部分,并在找到一个真实的部分后停止?

我总是可以通过分解它来明确表达,但这似乎是我应该知道的事情。

1 个答案:

答案 0 :(得分:2)

if A or B中,B仅在A为假时进行评估。

此概念称为short circuiting,您可以稍微阅读一下here.

这个想法是你从左到右直到确定结果。一旦发生这种情况,你就会停止。