2017.2.12
20.
Globa函数
作用就是修改全局变量。
内嵌函数
闭包
闭包是一种满足特定要求的内嵌函数。这里我们还是将内嵌函数称为子函数,其外部的函数称为母函数,则当子函数体内有对母函数体内定义的变量的引用时我们称这个子函数为一个闭包。但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数调用的,为了能够实现对闭包的调用,需要在母函数内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接调用闭包函数了,举例说明:
>>> def funx(x):
def funy(y): #这里面funy就是一个闭包
return x*y
return funy #直接返回闭包函数名
>>> i = funx(5) #返回过来的是一个函数对象赋值给了i
>>> i
<function funx.<locals>.funy at 0x0247CD68>
>>> type(i)
<class 'function'>
>>> i(8) #i可以直接进行函数调用了
40
当然也可以直接使用funx(5)(8)这种形式进行调用,和上述方式实现的结果一样。
在内嵌函数内修改外部函数内定义的变量的值
前面已经讲过,无法直接在闭包内部对外部函数的变量进行修改,但是如果真的非要修改的话,在Python3里面是可以的,需要增加一条声明此变量是外部函数内变量的语句nonlocal,举例说明:
>>> def mother():
num = 0
print('在mother函数体内定义的变量num的值为',num)
def son():
nonlocal num
num = 100
print('在son函数内部定义的num变量值为',num)
son()
print('在调用完son函数以后,mother函数体内定义的变量num的值为',num)
>>> mother()
在mother函数体内定义的变量num的值为 0
在son函数内部定义的num变量值为 100
在调用完son函数以后,mother函数体内定义的变量num的值为 100