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

Python不同函数间如何共享数据?为何无法调用其他函数内定义的变量

错误原因

你收到NameError: name 'a' is not defined的核心原因是Python的变量作用域规则限制:

  • 函数内部定义的变量默认属于局部作用域,仅在当前函数运行时有效,函数执行结束后变量就会被回收,函数外部无法直接访问。你在function1中定义的a、function2中定义的b都是各自函数的局部变量,全局命名空间中不存在这两个变量,因此你在全局位置直接调用function3(a, b)时,Python解释器找不到对应的变量名,就会抛出名称错误。
  • 额外补充:你当前的function3没有写return语句,直接print(function3(a,b))最终会额外输出一个None,这是Python函数默认的返回值。
可行的解决方法

方法1:通过返回值传递变量(最推荐)

让函数把需要共享的变量作为返回值输出,再传递给其他函数,是低耦合的实现方案:

def function1():
    a = 10
    return a

def function2():
    b = 10
    return b

def function3(a, b):
    res = a + b
    print(res)
    return res

# 先调用前两个函数拿到值,再传给第三个函数
a = function1()
b = function2()
print(function3(a, b))

方法2:用类封装共享属性

如果多个函数逻辑关联度高,可以封装为类的方法,把共享变量作为实例属性存储:

class DataCalculator:
    def function1(self):
        self.a = 10
    def function2(self):
        self.b = 10
    def function3(self):
        res = self.a + self.b
        print(res)
        return res

calc = DataCalculator()
calc.function1()
calc.function2()
print(calc.function3())

方法3:使用全局变量(不推荐,仅作参考)

通过global关键字声明变量为全局作用域,即可跨函数访问,但全局变量会提高代码维护成本,非必要不使用:

# 先在全局定义变量
a = 0
b = 0

def function1():
    global a
    a = 10

def function2():
    global b
    b = 10

def function3(a, b):
    res = a + b
    print(res)
    return res

function1()
function2()
print(function3(a, b))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:51:05