什么是闭包

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语句

  1. 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
    
  1. global:作用于整个当前声明的代码块,它意味着所列出的标识符将被解读为全局变量。

    scheduler = None
    
    def make_scheduler():
        global scheduler
        scheduler = Scheduler()
    

that's all

results matching ""

    No results matching ""