求助解析Python代码片段:为何以下代码运行输出结果为None
代码输出None的原因及执行流程
涉及的代码如下:
def func(x, y): """This is a function""" if x%3 == 0: return x elif x%3 == 1: return y x = 1 y = 2 print(func(y=x, x=y))
执行流程拆解
1. 参数传递环节
代码运行到函数调用func(y=x, x=y)时,使用的是关键字传参模式,参数匹配和书写顺序无关,完全按照指定的参数名绑定值:
- 形参
y绑定的是全局变量x的值,全局x为1,因此函数内部形参y=1 - 形参
x绑定的是全局变量y的值,全局y为2,因此函数内部形参x=2
注意:这里很容易踩惯性思维的坑,误以为函数内x=1、y=2,实际上两个参数的值因为关键字传参刚好互换了。
2. 分支返回逻辑
进入函数后按顺序执行条件判断:
- 第一个分支判断
x%3 == 0:当前函数内x为2,2除以3余数为2,条件不成立,不执行return - 第二个分支判断
x%3 == 1:2除以3余数为2,条件同样不成立,也不执行return
两个条件分支都没有命中,函数把所有可执行代码跑完后,会触发Python的默认返回规则:没有显式return的函数,默认返回值为None。外层的print打印的就是这个默认返回值,因此最终输出为None。
本质问题是函数的返回逻辑没有覆盖所有可能情况:只写了x除以3余0、余1时的返回值,余2的场景没有定义返回逻辑,刚好传参后x=2落在了未覆盖的场景中,就得到了None的结果。
内容的提问来源于stack exchange,提问作者wksoh
相关产品推荐
相关产品推荐

