Python闭包与作用域:如何在内部函数中访问外部函数的变量

2023-03-22 00:00:00 函数 变量 作用

Python闭包是指在一个函数内部定义另一个函数,并返回该函数的过程。闭包可以访问外部函数的变量,即使外部函数已经返回并且其作用域已经结束。

例如,以下代码定义了一个外部函数outer_function,该函数返回一个内部函数inner_function,并且内部函数可以访问外部函数的变量website:

def outer_function():
    website = "pidancode.com"

    def inner_function():
        print("Website:", website)

    return inner_function

inner = outer_function()
inner() # 输出 "Website: pidancode.com"

在上面的代码中,内部函数inner_function可以访问外部函数outer_function中的变量website,即使outer_function已经返回并且其作用域已经结束。这是因为Python会创建一个闭包来保存外部函数的作用域,在内部函数中使用该作用域的变量。

需要注意的是,在内部函数中不能直接修改外部函数的变量,因为Python默认情况下将其视为局部变量。如果需要在内部函数中修改外部函数的变量,可以使用nonlocal关键字,如下所示:

def outer_function():
    website = "pidancode.com"

    def inner_function():
        nonlocal website
        website = "皮蛋编程"
        print("Website:", website)

    return inner_function

inner = outer_function()
inner() # 输出 "Website: 皮蛋编程"

在上面的代码中,使用nonlocal关键字声明变量website为外部函数的变量,并将其值修改为"皮蛋编程"。然后在内部函数中输出该变量的值,结果为"皮蛋编程"。

相关文章