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

Python中逻辑运算符与in结合时返回值类型差异问题:为何部分语句返回布尔值,部分返回字符串?

Python中and/or返回值差异的原因拆解

这事儿得从Python里and和or的短路求值特性说起——它们和你熟悉的其他语言里的逻辑运算符不一样,不是只会返回布尔值,而是直接返回参与运算的实际操作数,结果类型完全取决于操作数本身!

先搞懂两个核心规则

Python里的and和or都是短路求值,意思是只要能确定结果,就不会继续计算后面的表达式:

  • and的规则:从左到右判断,若第一个操作数在布尔上下文中是False(比如空字符串、0、None),直接返回它;否则返回第二个操作数。
  • or的规则:同样从左到右,若第一个操作数在布尔上下文中是True(比如非空字符串、非零数字),直接返回它;否则返回第二个操作数。

另外要注意:in运算符的优先级比and/or高,所以会先执行x in y的判断,再进行逻辑运算。

针对你的例子逐一解析

先看目标字符串:

string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"

1. print("Lorem" and "aliqua" in string) 返回True

拆解步骤:

  1. 先算优先级更高的"aliqua" in string:目标字符串末尾确实有aliqua,所以结果是布尔值True。
  2. 表达式简化为"Lorem" and True。
  3. 因为"Lorem"是非空字符串,在布尔上下文中是True,所以and返回第二个操作数True——最终打印布尔值。

2. print("Lorem" or "aliqua" in string) 返回"Lorem"

拆解步骤:

  1. 同样先算"aliqua" in string,得到True。
  2. 表达式简化为"Lorem" or True。
  3. 因为"Lorem"是布尔真值,or会直接返回第一个操作数(短路,不用管后面的True)——所以最终打印字符串"Lorem"。

补充:什么时候会返回布尔值?

如果逻辑运算的其中一个操作数本身是布尔值,或者最后落到布尔值上,才会返回布尔类型。比如:

  • "" and "aliqua" in string:空字符串是False,直接返回""(字符串类型)。
  • "Lorem" and "":第一个是真值,返回第二个操作数""(字符串类型)。
  • "" or "aliqua" in string:第一个是False,返回"aliqua" in string的结果True(布尔类型)。

内容的提问来源于stack exchange,提问作者Ankit Chaurasia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:34:06