什么是闭包
python中支持闭包,那么什么是闭包?其实闭包就是一个定义在函数内部的一个函数,它会保留定义函数时存在的自由变量的绑定,并可以引用函数外定义的变,且该函数可以在其定义环境外被调用执行的一个函数。其作用是延伸了作用域。
# demon 1
def wrap(sum=0):
def inner(one, tow):
sum = one + tow
return sum
return inner
"""
w = wrap()
print(w(1, 2))
3
"""
# demon 2
def make_averager():
series = []
def averager(new_value):# 闭包函数
series.append(new_value)# series自由变量
total = sum(series)
return total
return averager
"""
mk = make_averager()
print(mk(11))
10.5
"""
变量作用域查找规则
python中变量的查找规则只需记住LEGB这4个字母即可,查找顺序如下
L -> E -> G -> B
这4个字母代表的含义如下
L:当前函数的作用域。
E:外围函数的作用域(例如包含当前函数的其他函数所对应的作用域)。
G:包含当前代码的那个模块对应的作用域,也叫全局作用域。
B:内置作用域(也就是包含len与str等函数的那个作用域)。
nolocal和global语句
nolocal:可以将闭包里的数据赋给闭包外的变量。
def sort_priority(num, group): found = False def helper(x): nolocal found if x in group: found = True return (0, x) return (x, 0) num.sort(key=helper) return found
global:作用于整个当前声明的代码块,它意味着所列出的标识符将被解读为全局变量。
scheduler = None def make_scheduler(): global scheduler scheduler = Scheduler()
that's all