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

Python中print()里使用辅助函数的短路求值问题解析

代码输出"geeks"的原因解析

核心逻辑:Python的or运算符是短路求值且返回实际操作数

拆解print(0 or check() or 1)的执行流程:

  • 第一步计算0 or check():在Python的布尔上下文里,0会被判定为False。or运算符的规则是:如果左边操作数为False,就会继续求值右边的操作数,并返回右边操作数的实际值。所以这里会调用check()函数,得到返回值"geeks",这部分的结果就是"geeks"。
  • 第二步计算"geeks" or 1:非空字符串在布尔上下文里是True。or运算符碰到左边为True时会直接短路(不再计算右边的操作数),并返回左边操作数的实际值。所以最终返回"geeks",被print输出。

关于你的两个疑问

  • 你的猜测没错:0在布尔判断中确实会被视为False。Python里所有的空/零值(比如0、""、[]、{}等)在布尔上下文里都会被判定为False,非空/非零值则为True。
  • 但布尔运算符不会把所有参数都当作布尔值处理后返回:它们只是用操作数的布尔值来决定求值路径,最终返回的是操作数本身的实际值,而不是转成True/False。比如0 or "geeks"返回的是"geeks"(字符串),而不是True;再比如1 or 0返回的是1(整数),不是True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:15:42