为什么第一个返回为真?不';t python从左到右读取?如果是这样,那么第一个应该是错误的

为什么第一个返回为真?不';t python从左到右读取?如果是这样,那么第一个应该是错误的,python,Python,我不明白为什么第一个是真的,当它看到真的还是真的时会短路 >>> True or False and False True >>> True or False and True True 由于的:和的优先级高于或。因此Python将首先执行和,所以 第一个是这样的: True or (False and False) => True or False => True True or (False and True) => True

我不明白为什么第一个是真的,当它看到真的还是真的时会短路

>>> True or False and False
True
>>> True or False and True
True
由于的:
的优先级高于
。因此Python将首先执行
,所以
第一个是这样的:

True or (False and False) 
=> True or False 
=> True
True or (False and True) 
=> True or False 
=> True
(False和False)
的结果为
False
True或False
的结果为
True

第二个是这样的:

True or (False and False) 
=> True or False 
=> True
True or (False and True) 
=> True or False 
=> True
(False和True)
的结果再次是
False
True或False
True
,,
的优先级高于
。因此Python将首先执行
,所以
第一个是这样的:

True or (False and False) 
=> True or False 
=> True
True or (False and True) 
=> True or False 
=> True
(False和False)
的结果为
False
True或False
的结果为
True

第二个是这样的:

True or (False and False) 
=> True or False 
=> True
True or (False and True) 
=> True or False 
=> True

(False和True)
的结果再次是
False
True或False
True
,在Python中,
的优先级高于
,这意味着
将首先绑定(在中搜索
运算符优先级,例如(1))

因此,您的两条语句相当于(尽管您错误地断言Python从左向右读取):

而且,无论上面两个表达式中括号内的子表达式的结果如何,
将其与
True
进行比较,都会得到
True


(1) 为了完整起见,该链接的相关部分(解释性文本和表格的初始部分)包括在下面,我强调:

下表总结了Python中运算符的优先级,从最低优先级(最少绑定)到最高优先级(最多绑定)。同一框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二进制的。同一框中的运算符从左到右分组(幂运算除外,幂运算从右到左分组)

操作员说明

----------------

lambda lambda表达式

if–else条件表达式
或布尔值或

和布尔and

非x布尔非


在Python中,
的优先级高于
,这意味着
将首先绑定(在中搜索
运算符优先级
,例如(1))

因此,您的两条语句相当于(尽管您错误地断言Python从左向右读取):

而且,无论上面两个表达式中括号内的子表达式的结果如何,
将其与
True
进行比较,都会得到
True


(1) 为了完整起见,该链接的相关部分(解释性文本和表格的初始部分)包括在下面,我强调:

下表总结了Python中运算符的优先级,从最低优先级(最少绑定)到最高优先级(最多绑定)。同一框中的运算符具有相同的优先级。除非明确给出语法,否则运算符是二进制的。同一框中的运算符从左到右分组(幂运算除外,幂运算从右到左分组)

操作员说明

----------------

lambda lambda表达式

if–else条件表达式
或布尔值或

和布尔and

非x布尔非


您应该提到
的优先级高于
,类似于
*
的优先级高于
+
。您应该提到
的优先级高于
,与
*
类似,具有比
+
更高的优先级。还有更多。还有更多。