【发布时间】:2012-04-27 18:35:49
【问题描述】:
在尝试减少嵌套 ifs(以及停止工作的脚本)遇到很多麻烦之后,我意识到我可能对布尔值在 python 中的工作原理和工作方式有错误的想法。
我有这个(工作正常但扭曲):
if (not gotside):
if (j > 1):
if (j < a.shape[1] - 1):
if a[i, j+unit]:
print "only now I do stuff!"
并尝试了这个(看起来因为没有按预期工作而变得简单):
if (not gotside) and (j > 1) and (j < a.shape[1] - 1) and a[i, j+unit]:
print "I'm well tested but not so indented..."
然后我尝试使用“或”而不是“和”,但没有奏效,因为(后来我发现)当你使用 x and y 甚至 x or y 时,你会得到 x, y 之一,而不是一个True, False,根据文档。
所以,我不知道如何将几个测试一个接一个地进行(最好在同一行中,使用布尔运算符),以使整个表达式在第一个测试评估后立即返回 False为假。
感谢阅读!
【问题讨论】:
-
您指的是短路。是的,我相信在您的简化示例中,如果 gotside 是真的,它应该“短路”等式,因此不要打扰其余的。如果不是,那么您可能需要用括号将所有其余的检查括在一组括号中。
-
即使布尔表达式可能不返回布尔值,但在布尔上下文中计算结果时,它会按照您的预期进行解释。
标签: python boolean short-circuiting truthtable