闭包是什么?
如果在一个内部函数中,对外部作用域(但不是全局作用域)的变量(即Enclosing变量)进行引用,那么这个内部函数就认为是闭包(closure)。
Python的变量按照其作用域可以分为四类:
L: Local,即函数内部作用域变量
E: Enclosing,即函数内部与内嵌函数之间的作用域变量
G: Global,即全局作用域变量
B: Build-in,即内置作用域变量
python解释器遇到变量时,会依据L>E>G>B的顺序去查找,简称LEGB。
举例:
#-*-coding:utf-8-*-
def funX(x):
print("funX is runing!")
def funY(y):
print('funY is runing!')
n = x*y
print('x*y = %d' % (n))
return n
return funY
y = funX(4)
y(5)
运行结果: