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

Python函数变量作用域报错及函数间结果传递咨询

为什么会出现NameError: name 'cd' is not defined?

这是个很典型的Python变量作用域问题,我来给你拆解清楚:

核心原因:局部变量的作用域限制

  • 你在sum函数内部定义的cd是局部变量——它只能在函数内部被访问和使用,一旦函数执行完毕,这个变量就会被Python的垃圾回收机制销毁,外部代码(比如函数外面的print(cd)或者diff(cd,3))根本看不到它的存在。
  • 更关键的是:你调用sum(ab, bc)时,只是让函数执行了计算,但没有把它的返回值保存到任何变量里。函数返回的结果如果不赋值给某个变量,就相当于“计算完就丢了”,外部没有任何变量指向这个结果,自然会提示cd未定义。

怎么解决这个问题?

只需要两步,就能让代码正常运行:

1. 保存sum函数的返回值

调用sum时,把它的返回值赋值给一个变量(可以叫cd,也可以叫别的名字,比如total),这样这个变量就会在全局作用域中存在,外部代码就能访问到它:

def sum(ab, bc):
    cd = ab + bc
    return cd

ab = 5
bc = 6
# 把sum的返回值赋值给全局变量cd
cd = sum(ab, bc)
print(cd)  # 现在能正常打印,输出11

2. 用保存的变量调用diff函数

现在全局作用域里有了cd变量,直接把它作为参数传入diff即可:

def diff(x, y):
    ef = x - y
    return ef

# 使用全局变量cd作为参数
result_diff = diff(cd, 3)
print(result_diff)  # 输出8

额外优化建议

其实函数内部的cd变量是多余的,你可以直接返回计算结果,让代码更简洁:

def sum(ab, bc):
    return ab + bc

def diff(x, y):
    return x - y

ab = 5
bc = 6
cd = sum(ab, bc)
print(cd)
print(diff(cd, 3))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:00