Python常规if语句与inline if三元表达式运行结果不一致原因求解
问题根因解释
两者的执行逻辑从本质上就不一样,你混淆了三元表达式和分支if-else的行为差异:
1. 基础前提
Python 中所有函数都有返回值,没有显式写return的函数默认返回None,因此print()函数的返回值固定为None。
2. 第一段三元表达式代码的执行逻辑
你写的赋值语句:
firstId = False if firstId else print(str(x)+ " " + str(firstId))
每次循环都会给firstId重新赋值,赋值规则为:
- 如果当前
firstId为真值,就把False赋值给firstId - 如果当前
firstId为假值,就先执行print(...)输出内容,再把print()的返回值None赋值给firstId
逐轮循环走一遍就很清楚:
- x=1时:初始
firstId=True,走第一个分支,firstId被赋值为False,无输出 - x=2时:
firstId=False(假值),走else分支,先输出2 False,再把print返回的None赋值给firstId,此时firstId=None - x=3到x=5时:
firstId一直是None(属于假值),每次都走else分支,先输出x None,再把None重新赋值给firstId,因此输出一直带None
3. 第二段普通if-else代码的执行逻辑
你写的分支语句:
if firstId: firstId = False else: print(str(x)+ " " + str(firstId))
只有if分支会修改firstId的值,else分支仅执行打印操作,完全不会改动firstId的值:
- x=1时:
firstId=True,走if分支,firstId被赋值为False,无输出 - x=2到x=5时:
firstId一直是False,走else分支仅打印内容,不会修改firstId,因此输出一直带False
核心差异总结
三元表达式是有返回值的表达式,你全程把它的返回值赋值给了firstId,因此else分支的返回值(print的None)会覆盖变量;而普通if-else是流程控制语句,else分支没有赋值操作,变量不会被修改,两者逻辑完全不对等。
内容的提问来源于stack exchange,提问作者laronda7
相关产品推荐
相关产品推荐

