You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'))
  1. 首先执行最左侧的print('1'):

    • 输出内容:1
    • 返回值:None(布尔值为False)
    • 因为是or操作,左侧为False,无法确定整个or表达式的结果,所以需要继续计算右侧的print('2') and print('3')部分
  2. 计算print('2') and print('3'):

    • 先执行print('2'),输出内容:2,返回值None(布尔值False)
    • 对于and操作,左侧已经是False,无论右侧是什么,整个and表达式的结果都是False,触发短路求值,所以print('3')不会被执行
    • 这部分的最终结果是None(False)
  3. 回到第一个or操作:None or None,结果还是None(False),无法确定整个外层or的结果,所以继续执行最右侧的print('4'):

    • 输出内容:4
    • 返回值:None(False)
  4. 整个大表达式的结果是None,外层的print()会输出这个结果:None

所以最终输出顺序就是:

1
2
4
None

你的预期错误在于,误以为优先级高的and会先执行所有相关操作,但实际上短路求值是按左到右的顺序,只有当前面的操作数无法确定结果时,才会执行后续的优先级高的部分。

内容的提问来源于stack exchange,提问作者Jong-woo Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:56:02