根据python教程,函数在查找全局函数之前在封闭函数的符号表中查找变量名:
函数的执行引入了用于函数局部变量的新符号表.更确切地说,函数中的所有变量赋值都将值存储在本地符号表中; 而变量引用首先在本地符号表中查找,然后在封闭函数的本地符号表中查找,然后在全局符号表中查找,最后在内置名称表中查找.因此,全局变量不能直接在函数内赋值(除非在全局语句中命名),尽管可以引用它们.
"封闭功能"究竟是什么意思,何时使用?
我看到以下代码在调用时打印10
def parent_function():
y=10
def child_function():
print y
child_function()
Run Code Online (Sandbox Code Playgroud)
但是,单独调用child_function()会产生错误.是否经常使用封闭功能?
封闭函数的概念是理解闭包概念的关键.因为python没有全功能的lambda(它们只允许表达式而不是语句),所以将嵌套函数传递给其他函数是一个常见的用例:
def receiving_function(f):
f()
def parent_function():
y = 10
def child_function():
print(y)
receiving_function(child_function)
Run Code Online (Sandbox Code Playgroud)
将10像以前一样打印.这是闭包的常见实例,其中封闭函数将其变量"移交"到封闭函数中.在上面的示例中,此函数receiving_function与非局部变量一起传递y.