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

为何Python中使用or运算符时左右两个表达式都会被执行?

为什么Python中用or连接的两个print语句都会执行?

我编写了如下代码:

def func(i):
    a = i + 1
    (a % 15 == 0 and print(f"{a} AB")) or print(a)

    i < 15 and func(a)
    
func(0)

运行后输出为:

1
2
...
14
15 AB
15
16

我无法理解,为何使用or连接(a % 15 == 0 and print(f"{a} AB"))和print(a)这两个语句时,两者都会被执行。请问原因是什么?

P.S:补充说明,这只是练习代码,绝不会用于生产环境。


问题解析

核心原因在于Python逻辑运算符的短路求值规则,以及print()函数的返回值特性:

  • print()函数执行后会返回None,而None在布尔语境下会被判定为False。
  • 当a=15时:
    1. 先执行左边表达式(a % 15 == 0 and print(f"{a} AB")):因为a%15==0是True,短路求值会继续执行print("15 AB"),这个print输出内容后返回None,所以整个左边表达式的结果是None(布尔值为False)。
    2. 接着执行None or print(a):由于左边是False,or运算符的短路规则会触发右边的表达式,所以print(a)被执行,输出15。
  • 而当a≠15时,左边表达式(a%15==0 and ...)会直接返回False,or触发右边的print(a),只会输出一次数值,符合预期。

另外输出里的16来自递归调用:当i=14时,执行完那行代码后,i<15为True,会递归调用func(15),此时a=16,左边表达式不成立,只执行右边的print(16)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:10