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.
想法是从左到右 直到 确定结果。既然如此,你就停下来。
我在一段 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.
想法是从左到右 直到 确定结果。既然如此,你就停下来。