python 闭包
闭包概念
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包,最终外部函数返回的结果为内部函数
In [33]: def te(number): ...: def te_in(number_in): ...: return number + number_in ...: return te_in ...: In [34]: ret = te(20) In [35]: print(ret) <function te.<locals>.te_in at 0x04563738> In [36]: ret(100) Out[36]: 120 In [37]: te(20)(500) Out[37]: 520
闭包优缺点
1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存
python3 内部函数改变外部参数值
In [38]: def cont(start=0): ...: def incr(): ...: nonlocal start ...: start += 1 ...: return start ...: return incr ...: In [40]: cont(5) Out[40]: <function __main__.cont.<locals>.incr> In [41]: c1 =cont(5) In [42]: print(c1) <function cont.<locals>.incr at 0x04576CD8> In [43]: print(c1()) 6
python2 中要想在闭包中改变参数的值,要借助于可变类型的列表,将参数放在列表的中,对列表内部元素执行改变操作
def counter(start=0): count=[start] def incr(): count[0] += 1 return count[0] return incr c1 = counter(5) print(c1())#6 print(c1())#7 c2 = counter(100) print(c2())#101 print(c2())#102
LESS IS MORE !