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

2024-01-01

我在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(使用前将#替换为@)

了解 Python 嵌套函数中的变量作用域 的相关文章

随机推荐