内部函数访问外部函数的变量

时间:2017-01-04 22:41:26

标签: python

我们假设有这个简单的代码:

def my_outer_function():
    outer_var = 123
    def my_inner_function():
        return outer_var + 1
    return my_inner_function

get_inner = my_outer_function()
get_inner()                      

我想知道没有任何类型的运行时错误。 outer_var - 外部函数的变量 - 仅在该函数运行时可用,即在my_outer_function结束时消失。但是,当我致电get_inner()时,my_outer_function()已经结束,因此我会赌一个运行时错误,因为my_inner_function无法找到outer_var

你怎么解释这一切?

1 个答案:

答案 0 :(得分:1)

  

外部函数的变量仅在该函数运行时可用,即当my_outer_function结束时消失。

这不完全正确。该变量在my_outer_function的范围内可用。 my_inner_function具有自己的声明范围其父级的范围。

my_inner_function引用其自身范围之外的变量,因此当其父级的范围不再可用时,这些引用将作为闭包绑定到my_inner_function。要了解有关闭包的更多信息,请参阅Can you explain closures (as they relate to Python)?(取自Paul Rooney的评论)