有人发了和你完全一样的帖子,差点以为是同一个人~~~
这样吧,我把答案粘过来~~~
先说结论,试验结果和官方文档说的完全一致(当然,这是一句废话。。)
结论是:计算的时候,完全按照从左到右的顺序进行计算,所以严格来说是没有楼主说的那种优先级的,如果说有优先级,那也是严格的从左到右的优先级
先放一个官方文档里关于and 和or 的说明
https://docs.python.org/2/library/stdtypes.html
官方文档的5.2节,详细解释了and 和or 的作用
x or y if x is false, then y, else x
x and y if x is false, then x, else y
not x if x is false, then True, else False
然后我的例子>>> 5 + 0 and True
True
>>> 5 + (0 and True)
5
>>> 1 or 2 + True
1
>>> 0 or 2 + True
3
>>> 1 or 2 + d # 注意此处的变量d我并未定义,仍然得到了结果1
1
>>> 0 or 2 + d
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
1.从第一个、第二个和第三个例子对比可以,and 前面的部分计算完作为and 连接符左侧的x来进行判断,
2.从第四个和第五个例子可以看到,or连接符左侧如果为真,那么不论右侧是什么都不会运行
and连接符左侧如果为假,那么不论右侧是什么都不会运行
这里可以扩展出一个简化(gaoluan)代码的一个用法表达式a and 函数b
if 表达式a:
函数b
上面的两段代码的功能相同,or 也可以这么玩~~~
所以,我个人的理解是,楼主的例子中,图片中的说法,和楼主的说法都不准确
这个例子中实际的运作是这样的 3 and 5 + True or False
1.先从左到右进行计算,and左侧是3,所以根据文档的规则x and y if x is false, then x, else y,这里的x=3是True,所以这个表达式的值应该是and右侧的部分5 + True or False这个表达式的值
2.5 + True or False这个表达式同样从左往右,计算到or的时候, or左侧为5+True=6,根据文档的规则x or y if x is false, then y, else x,所以这个表达式=6,最后得到整个表达式的值为6
多说一句,虽然看起来好像是先计算了5+True ,但仅仅这样理解是片面的,真正的规则只有一个,就是从左往右进行计算,然后严格按照and 和or 的逻辑判断规则进行计算
以上,如过说的有问题,欢迎讨论,我还是挺喜欢交流的,交流就是学习~~~
|