为何Python中将函数内return替换为print后布尔逻辑结果不同
代码执行逻辑拆解
核心规则前提
- Python 中所有未显式书写
return语句的函数,执行结束后默认返回None print()函数的作用仅为将内容输出到控制台,自身不存在有效返回值,本质也是返回None
逐行执行流程(修改后的代码)
从触发最外层的print(is_odd(2))开始,每一步的执行顺序为:
- 将参数
2传入is_odd函数,进入函数执行流程 - 遇到
return not is_even(x)语句时,会优先计算not后面的表达式值,也就是先调用is_even(2) - 进入
is_even函数,执行内部的print(x),此时控制台输出第一行内容2 is_even函数内部没有任何return语句,因此执行完打印逻辑后,向调用方返回默认值None- 回到
is_odd的逻辑分支,计算not None:Python 中None在布尔判断规则下属于假值,取反后结果为True - 将
True作为is_odd的返回值,传给最外层的print函数,控制台输出第二行内容True
认知误区补正
- 你最初看到的代码能得到符合预期的结果,本质是因为原
is_even函数写了return x:传入2时函数直接返回整数2,2在布尔判断中属于真值,取反后为False,对应“2不是奇数”的判断 - 把
return x替换为print(x)后,相当于完全移除了is_even向外传递计算结果的通道,不管传入什么数字,is_even只会打印输入值,然后返回None,这时候不管调用is_odd(1)还是is_odd(100),最终结果都会是True,和数字本身的奇偶性没有任何关系
内容的提问来源于stack exchange,提问作者Jude
相关产品推荐
相关产品推荐

