如何访问嵌套函数中更多全局函数中的变量? (Python)

时间:2019-07-11 15:41:52

标签: python function variables scope nested

我正在另一个函数中运行一个函数。但是,嵌套更多的函数无法访问主要的全局函数中的变量。当我尝试运行代码时,出现“ x not defined”错误。我认为,由于x是作用域范围更大的全局变量,因此应该可以访问。

def func_master():
    x = 'hello world'
    test_sub()


def test_sub():
    print(x)

func_master()

我希望它打印出“ hello world”。

1 个答案:

答案 0 :(得分:3)

您的函数不是“嵌套”的,这意味着其中一个在另一个内部被定义。相反,您是从另一个函数内部调用一个函数,但是这些函数是分别定义的,而不是在另一个函数内部。

Python的范围规则基于定义的方式。因此,当func_master调用test_sub时,x无法访问func_master中定义的名称test_sub

使xtest_sub中可用的最佳(但不仅是)方法是将其作为参数传递。修改func_master中的呼叫以传递x,并修改test_sub的定义以接收该呼叫。良好的编程习惯是,一个例程将所有需要的信息作为参数传递-除非绝对需要,否则请避免使用全局变量等。

def func_master():
    x = 'hello world'
    test_sub(x)


def test_sub(x):
    print(x)

func_master()