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

Python中(1 or 2)与(1 and 2)的含义及逻辑运算符返回值解析

Python中or和and的短路求值逻辑及正确用法

核心原理:短路求值与返回实际操作数

Python里的or和and并不是单纯返回True或False,而是遵循短路求值规则,直接返回参与运算的实际操作数:

  • or运算符:从左到右遍历操作数,返回第一个被判定为「真值」的元素;如果所有元素都是「假值」,则返回最后一个假值。
    (注:Python中除了0、""、[]、{}、None等少数值为假值,其余大多为真值)
  • and运算符:从左到右遍历操作数,返回第一个被判定为「假值」的元素;如果所有元素都是「真值」,则返回最后一个真值。

测试结果拆解

来看你给出的几个例子:

  • print(1 or 2):1是真值,直接返回1,所以输出1
  • print(1 and 2):1是真值,继续判断下一个,2也是真值,返回最后一个元素2
  • print(1 or 2 or 3):第一个元素1是真值,直接返回1
  • print(1 and 2 and 3):所有元素都是真值,返回最后一个元素3
  • print(1 or 2 and 3):and优先级高于or,先算2 and 3得3,再算1 or 3,1是真值返回1
  • print(1 and 2 or 3):先算1 and 2得2,再算2 or 3,2是真值返回2

正确简化多值判断的方法

你想简化if i ==1 or i ==2的写法,不要用i == (1 or 2)这种错误方式,正确的简化方法是用in关键字:

for i in range(10):
    if i in {1, 2}:  # 用集合,查找效率更高
        print(i)

也可以用列表if i in [1,2],效果一致,集合在元素数量较多时性能更优。

为什么i == (1 or 2)不对

1 or 2会直接返回1,所以你的代码等价于if i ==1,自然只会输出1;同理(2 or 1)返回2,代码就等价于if i ==2,只会输出2。

内容的提问来源于stack exchange,提问作者Clay Hsu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:45:39