闭包函数
一、闭包函数
闭包:被函数包裹的函数,定义在函数内部的函数 def func(): name = 'eva' def inner(): print(name)
函数的嵌套定义 闭包函数 定义 在一个函数体内定义另一个函数 外部函数返回内部函数的引用,同时内部函数引用了外部函数的局部变量 作用域 嵌套函数可以访问其外部函数的局部变量和全局变量 闭包可以记住并访问其创建时的环境,包括外部函数的局部变量 用途 组织代码和限制变量的作用域,增强代码的可读性和可维护性 实现回调函数、数据封装和私有变量等 关键点 嵌套函数本身不形成闭包,除非它被返回或作为值传递,并且引用了外部函数的局部变量 闭包特指返回了引用外部变量的嵌套函数的情况 综上所述,闭包函数是函数的嵌套定义的一种特殊形式,它要求外部函数返回内部函数的引用,并且这个内部函数需要引用外部函数的局部变量。这种特性使得闭包函数在数据封装、私有变量保护和回调函数等方面有着广泛的应用。
# 闭包中使用的变量可以被外层函数所传递,外层函数可以为闭包函数传递参数 def outter(num): def inner(): print(num) # 10 inner() def t(): count = 10 outter(count) t()
2.2 闭包函数的意义
由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。
我们都知道函数内的变量我们要想在函数外部用,可以直接返回这个变量,那么如果我们想在函数外部调用函数内部的函数呢?
是不是直接就把这个函数的名字返回就好了?
这才是闭包函数最常用的用法
def func(): name = 'eva' def inner(): print(name) return inner f = func() f()
#输出的__closure__有cell元素 :是闭包函数 def func(): name = 'eva' def inner(): print(name) print(inner.__closure__) return inner f = func() f() #输出的__closure__为None :不是闭包函数 name = 'egon' def func2(): def inner(): print(name) print(inner.__closure__) return inner f2 = func2() f2()