一、内嵌函数
内嵌函数指的是在一个函数体内部定义的函数,可以称它为函数的函数,也就是子函数,外部的函数称之为母函数,就类似局部变量和全局变量
子函数体内定义的变量只在其函数内部有效,但其内部可以调用母函数定义的变量,但无法直接修改母函数体内定义的变量。
二、闭包
闭包是一种满足特定要求的内嵌函数(子函数),其外部的函数称为母函数,则当子函数体内有对母函数体内定义的变量的引用时我们称这个子函数为一个闭包
但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数的调用的,为了能够实现对闭包的调用,需要在母函数内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接的调用闭包函数
下诉代码中,我们也可以使用fun1(7)(8)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def fun1(x): 2 def fun2(y): 3 return x*y 4 return fun2 5 6 i = fun1(7) 7 type(i) 8 <class 'function'> 9 i(8) 10 56
三、在内嵌函数中(子函数)修改外部函数(母函数)的变量的进行修改
Python3可以实现,多使用一条声明语句:nonlocal 注意与global语句的区别,global语句是在函数体内修改全局变量的值,
格式:nonlocal 外部函数的变量名
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def mother(): 2 var = 110 3 print('mother中的var的值为',var) 4 def son(): 5 nonlocal var 6 var = 119 7 print('Son中的var的值为',var) 8 print('函数中的var的值为',var) 9 return son 10 11 12 >>> mother()() 13 mother中的var的值为 110 14 函数中的var的值为 110 15 Son中的var的值为 119 16 这时我们打印var的值,其为119, 17 因为程序的运行过程是,mother运行结束返回son->son运行