我正在另一个函数中运行一个函数。但是,嵌套更多的函数无法访问主要的全局函数中的变量。当我尝试运行代码时,出现“ x not defined”错误。我认为,由于x是作用域范围更大的全局变量,因此应该可以访问。
def func_master():
x = 'hello world'
test_sub()
def test_sub():
print(x)
func_master()
我希望它打印出“ hello world”。
答案 0 :(得分:3)
您的函数不是“嵌套”的,这意味着其中一个在另一个内部被定义。相反,您是从另一个函数内部调用一个函数,但是这些函数是分别定义的,而不是在另一个函数内部。
Python的范围规则基于定义的方式。因此,当func_master
调用test_sub
时,x
无法访问func_master
中定义的名称test_sub
。
使x
在test_sub
中可用的最佳(但不仅是)方法是将其作为参数传递。修改func_master
中的呼叫以传递x
,并修改test_sub
的定义以接收该呼叫。良好的编程习惯是,一个例程将所有需要的信息作为参数传递-除非绝对需要,否则请避免使用全局变量等。
def func_master():
x = 'hello world'
test_sub(x)
def test_sub(x):
print(x)
func_master()