Python调用栈疑问求助:代码返回值与执行逻辑解析
咱们把代码拆解开,一步步走流程,就能搞懂这两个问题啦~
代码回顾
def m1(x): x = x + 1 z = m2(x, 4) x = x + 1 z = z + 1 print(x) return z def m2(x, y): x = x + 1 y = y + 1 print(x, y) return x x = 1 x = x + m1(x)
问题1:为什么第7行
return z返回4? 咱们从调用m1(x)的那一刻开始一步步捋:
- 第16行调用
m1(x)时,当前全局变量x是1,所以传给m1的参数x初始值是1 - 进入
m1函数:- 第2行:
x = x + 1→ 函数内的x变成2 - 第3行:调用
m2(x, 4),也就是把2和4传给m2的参数x和y - 进入
m2函数:- 第10行:
x = x + 1→m2内的x变成3 - 第11行:
y = y + 1→m2内的y变成5 - 第12行:打印
3 5 - 第13行:
return x→ 把3返回给m1里的z,所以此时m1的z等于3
- 第10行:
- 回到
m1函数:- 第4行:
x = x + 1→m1内的x原本是2,现在变成3 - 第5行:
z = z + 1→z原本是3,现在变成4 - 第6行:打印
3 - 第7行:
return z→ 自然就返回4啦
- 第4行:
- 第2行:
问题2:第16行
x = x + m1(x)的执行逻辑是怎样的? Python的赋值语句规则是先计算等号右边的所有表达式,再把结果赋值给左边的变量,所以这行的执行步骤是:
- 先读取当前全局变量
x的值,也就是1,把这个值作为参数传给m1函数 - 完整执行
m1(1)的所有逻辑(就是上面问题1里的流程),得到m1的返回值4 - 把第一步读取的
x值(1)和m1的返回值(4)相加,得到1+4=5 - 最后把计算结果5赋值给左边的全局变量
x,所以执行完这行后,全局x的值变成5
内容的提问来源于stack exchange,提问作者bhr
相关产品推荐
相关产品推荐

