我在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
该代码有效。
我的问题:我的理解是,在嵌套函数中,内部函数开始从自身查找变量,然后转到外部函数,最后到全局范围。然后,我预计第一个函数也会运行,但事实并非如此。那是什么?
我读过其他的范围相关问题 https://stackoverflow.com/questions/37473666/variable-scope-in-python-nested-function但没有找到我的答案。
在你的第一种情况下
def good_func():
sheet_num = 2
row_num = 2
a = test_file('new file')
return a
sheet_num
and row_num
是函数局部的good_func
因此不能在另一个函数中访问output_report
但当你这样做时
sheet_num = 2
row_num = 2
def good_func():
a = test_file('new file')
return a
sheet_num
and row_num
成为所有其他函数都可以访问的全局变量,因此它们可以在output_report
as well
嵌套函数也是其定义位于另一个函数中的函数,如下所示,其中a
可以在以下位置访问inner
def outer():
a = 1
def inner():
print(a)
inner()
outer()
像您一样在函数内调用另一个函数good_func
不让他们output_function
nested.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)