我希望以相同的方式评估以下两个代码块,但情况似乎并非如此。例如,用这个:
if True or False and False:
print('True')
else:
print('False')
True 被打印出来。但是有了这个:
if (True or False) and False:
print('True')
else:
print('False')
False 被打印出来。这是我的逻辑分解:
对或错=True真假=假
通过替换,(True or False) and False = True and False = False。
为什么会这样?
请您参考如下方法:
这是因为 operator precedence .根据 Python 2.x 和 3.x 文档,and 运算符的优先级高于 or 运算符。另外,看看 bool 真值表:
这意味着在你的表达中:
if True or False and False:
在表达式中,False 和 False 根据优先级组合在一起。这意味着 Python 将其评估为:
if True or (False and False):
现在,它是从左到右求值的。由于第一个条件是 True,它会短路并跳过第二个条件并评估为 True 打印“True”。 (这短路是因为如果第一边为真,它必须为真。)
现在在你的第二个例子中:
if (True or False) and False:
这使得 True or False 首先求值,它给出 True。然后它执行 True and False,即 False,打印“False”。
>>> print(True or False)
True
>>> print(True and False)
False
