python 3 内嵌函数和闭包

发布时间 2023-10-02 16:08:22作者: 老牛你牛

内嵌函数:本质是 函数里又嵌套一个函数

def fun1():   

    print('fun1()在被调用')   
    def fun2():       
        print('fun2()在被调用')
    fun2()    #调用fun2()  
fun1()
fun1()正在被调用
fun2()正在被调用
内嵌函数的作用域在外部函数之内,即fun2只能在fun1之内调用。     
 
 

闭包是函数里面嵌套函数,

外层函数返回里层函数,

这种情况称之为闭包  闭包是概念,不是某种函数类型,和递归的概念类似,

就是种特殊的函数调用;  闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁  

def fun4(a):

     print(a)
     def fun5():
          print(a,11)
     return fun5       #调用不执行 
 
= fun4(3)
 
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
def funx(x):
    def funy(y):
        return * y
    return funy  
funx(5)
<function funx.<locals>.funy at 0x0000006AB7FDD7B8>  
funx(4)(8
 
32

我们发现,funx是一个函数,包括一个参数x。

比较特殊的地方是这个函数里面又定义了一个新函数funy,这个新函数里面的一个变量正好是外部函数funx的参数。

也就是说,外部传递过来的参数已经和funy函数绑定到一起了。

我们可以把x看做新函数的一个配置信息,配置信息不同,函数的功能就不一样了,也就是能得到定制之后的函数。