我们假设有这个简单的代码:
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
。
你怎么解释这一切?
答案 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的评论)