Python短路运算符求值顺序异常及代码结果疑惑咨询
Python逻辑表达式执行顺序解析
先明确两个核心规则:
- 运算符优先级:
and>or,所以表达式A or B and C等价于A or (B and C) - 短路求值:逻辑运算符会按顺序执行,一旦能确定整个表达式的结果,就停止执行后续操作;同时
print()函数的返回值是None,在布尔判断中视为False
现在一步步拆解你给出的代码:
print(print('1') or print('2') and print('3') or print('4'))
首先执行最左侧的
print('1'):- 输出内容:
1 - 返回值:
None(布尔值为False) - 因为是
or操作,左侧为False,无法确定整个or表达式的结果,所以需要继续计算右侧的print('2') and print('3')部分
- 输出内容:
计算
print('2') and print('3'):- 先执行
print('2'),输出内容:2,返回值None(布尔值False) - 对于
and操作,左侧已经是False,无论右侧是什么,整个and表达式的结果都是False,触发短路求值,所以print('3')不会被执行 - 这部分的最终结果是
None(False)
- 先执行
回到第一个
or操作:None or None,结果还是None(False),无法确定整个外层or的结果,所以继续执行最右侧的print('4'):- 输出内容:
4 - 返回值:
None(False)
- 输出内容:
整个大表达式的结果是
None,外层的print()会输出这个结果:None
所以最终输出顺序就是:
1 2 4 None
你的预期错误在于,误以为优先级高的and会先执行所有相关操作,但实际上短路求值是按左到右的顺序,只有当前面的操作数无法确定结果时,才会执行后续的优先级高的部分。
内容的提问来源于stack exchange,提问作者Jong-woo Choi
相关产品推荐
相关产品推荐

