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

同一Lambda函数中AND与OR逻辑运算符的用法疑问

问题解答:Python中and/or组合判断奇偶的逻辑

你遇到的两段Lambda代码:

(lambda x: (x % 2 and 'odd' or 'even'))(5)  # 执行结果:'odd'
(lambda x: 'even' if x % 2 == 0 else 'odd')(3)  # 执行结果:'odd'

核心疑问是x % 2 and 'odd' or 'even'的运算逻辑,下面拆解说明:

短路求值:and/or的核心特性

Python的and和or是短路运算符,它们返回的是参与运算的操作数本身,而非单纯的布尔值,规则如下:

  • a and b:如果a是假值(比如0、空字符串、None等),直接返回a;如果a是真值,返回b
  • a or b:如果a是真值,直接返回a;如果a是假值,返回b

另外,and的优先级高于or,所以表达式x % 2 and 'odd' or 'even'会先计算x % 2 and 'odd',再将结果与'even'做or运算。

分情况拆解运算过程

当x为奇数时(比如x=5)

  1. x % 2计算得1(属于真值)
  2. 执行1 and 'odd':因为1是真值,返回右侧的'odd'
  3. 执行'odd' or 'even':'odd'是真值,直接返回'odd',最终结果为'odd'

当x为偶数时(比如x=4)

  1. x % 2计算得0(属于假值)
  2. 执行0 and 'odd':因为0是假值,直接返回0(短路,无需计算'odd')
  3. 执行0 or 'even':0是假值,返回右侧的'even',最终结果为'even'

为什么推荐三元表达式写法

你给出的'even' if x % 2 == 0 else 'odd'逻辑更直观,可读性更强,还能避免and/or写法的潜在坑:如果'odd'是假值(比如空字符串''),那么x%2 and '' or 'even'会错误返回'even',而三元表达式不会出现这种问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:32:33