-
闭包
-
什么是闭包:在一个内部函数中,对外部函数作用域的变量进行引用(并且一般外部函数的返回值是内部函数),那么内部函数被认为是闭包
-
闭包的作用
-
使用外部函数内的变量
-
让变量的值始终保存在内存中
```一个棋盘,左上角的是原点origin[0,0],一个函数来控制棋子的运动,接受两个参数方向(direction)和步长(step),棋子的每次的起点是上次运动结束的终点``` def create(pos = origin): def go(direction,step): new_x = pos[0] + direction[0] * step new_y = pos[1] + direction[1] * step pos[0] = new_x pos[1] = new_y return pos return go player = create() print(player([0,1]),10) #[0,10] print(player([2,3]),10) #[20,40]
函数go的局部变量pos一直储存在内存中,并没有随着go的调用结束而被自动消除,为什么呢?
create是go的父函数,go被赋给了一个全局变量,这导致go一直存在与内存中,create依赖于go,因此也存在于内存中,包括它的局部变量 pos。
-
-
使用闭包需要注意的地方
闭包会使函数中的变量都保存在内存中,内存消耗很大,所以使用闭包需要谨慎使用,解决方式是,在退出函数之前,将不使用的局部变量删除。
-