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 !
原文地址:https://www.cnblogs.com/maxiaohei/p/7795326.html