Python中AND和OR的逻辑运算符绑定

时间:2016-09-09 08:58:56

标签: python logical-operators

昨天在构建条件语句时,我遇到了一个奇怪的优先规则。我的陈述是

if not condition_1 or not condition_2 and not condition_3:

我找到了

if True or True and False:
    # Evaluates to true and enters conditional

在我的脑海中(以及之前使用其他语言的经验)and条件应该具有优先权,因为语句被评估 - 所以语句应该等同于

if (True or True) and (False):

但事实上它是

if (True) or (True and False):

这对我来说似乎很奇怪?

2 个答案:

答案 0 :(得分:1)

来自python wiki:

  

表达式x and y首先评估x;如果x为false,则返回;否则,评估y并返回结果

     

表达式 x或y 首先评估x;如果x为真,则返回;否则,评估y并返回结果

所以在你的情况下

if True or True and False:

由于口译员在True之前遇到or,因此不会继续and表达并评估为True

答案 1 :(得分:0)

正如你所说and有更高的偏好,所以带括号的表达式正是你所说的:

if (True) or (True and False)

由于此True or (anything) TrueTrue,因此结果为 $('label').click(function() { $('.greyBtn').addClass('glow'); if ($('.greyBtn').data('clicked', true)) { $('greyBtn').removeClass('glow'); } else if ($('.cancel').data('clicked', true)) { $('greyBtn').remove.Class('glow'); } }); 。即使评估任何内容,也不在快捷评估中。