让我们假设有以下简单代码:
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。
你怎么解释这一切?
发布于 2017-01-04 22:49:28
外部函数的变量只有在该函数运行时才可用,即当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的评论)
https://stackoverflow.com/questions/41474465
复制相似问题