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

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
    • 回到m1函数:
      • 第4行:x = x + 1 → m1内的x原本是2,现在变成3
      • 第5行:z = z + 1 → z原本是3,现在变成4
      • 第6行:打印3
      • 第7行:return z → 自然就返回4啦
问题2:第16行x = x + m1(x)的执行逻辑是怎样的?

Python的赋值语句规则是先计算等号右边的所有表达式,再把结果赋值给左边的变量,所以这行的执行步骤是:

  1. 先读取当前全局变量x的值,也就是1,把这个值作为参数传给m1函数
  2. 完整执行m1(1)的所有逻辑(就是上面问题1里的流程),得到m1的返回值4
  3. 把第一步读取的x值(1)和m1的返回值(4)相加,得到1+4=5
  4. 最后把计算结果5赋值给左边的全局变量x,所以执行完这行后,全局x的值变成5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:03