python 中布尔表达式的求值顺序

order of evaluation of boolean expression in python

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

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

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

我总是可以通过分解它来明确它,但它似乎是我应该知道的东西。

if A or B 中,B 仅在 A 为假时计算。

这个概念叫做short circuiting,你可以稍微读一下here.

想法是从左到右 直到 确定结果。既然如此,你就停下来。