了解 Python 中嵌套函数中的变量作用域



>我在Python3.7中有以下函数

def output_report():
sheet_dict = {1: 'All', 2: 'Wind', 3: 'Soalr'} 
sheet_name = sheet_dict[sheet_num]
file_name = f'{file_name}_{sheet_name}_row_{row_num}.csv' if row_num else 
f'{file_name}_{sheet_name}.csv'
return file_name
def test_file(x):
file_name = output_report(sheet_num)
return f'{x}_{file_name}'
def good_func():
sheet_num = 2
row_num = 2
a = test_file('new file')
return a

当我打电话时:good_func()

它引发一个错误:

名称错误: 未定义名称"sheet_num">

但是,如果我在全球范围内定义sheet_name和row_num,例如,

sheet_num = 2
row_num = 2
def good_func():
a = test_file('new file')
return a

代码有效。

我的问题:我的理解是,在嵌套函数中,内部函数开始从自身寻找变量,然后转到外部函数,最后到全局范围。然后,我预计第一个函数也可以运行,但事实并非如此。什么? 我阅读了其他与范围相关的问题,但没有找到答案。

在你的第一种情况下

def good_func():
sheet_num = 2
row_num = 2
a = test_file('new file')
return a

sheet_numrow_num是函数good_func的本地,因此无法在另一个函数中访问output_report

但是当你这样做时

sheet_num = 2
row_num = 2
def good_func():
a = test_file('new file')
return a

sheet_numrow_num成为所有其他函数都可以访问的全局变量,因此它们也可以在output_report中访问

嵌套函数也是定义位于另一个函数中的函数,例如这样,其中a可以在inner中访问

def outer():
a = 1
def inner():
print(a)
inner()
outer()

像在函数中那样调用函数内的另一个函数good_func不会使它们output_function嵌套。

相关内容

  • 没有找到相关文章

最新更新