Python 闭包

闭包:

闭包(closure)不是什么复杂得不得了的东西,它只不过是个“内层"的函数,由一个名字(变量)来指代,

而这个名字(变量)对于"外层"包含它的函数而言,是本地变量。

def make_addr(addend):
    def adder(augend):return augend+addend
    return adder
p=make_addr(23)
print p(12)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/ddd/a6.py
35

def make_addr(addend):
    def adder(augend):return augend+addend
    return adder
p=make_addr(23)
print p
print p(12)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/ddd/a6.py
<function adder at 0x02580A70>
35

执行p=make_addr(23) 将产生内层函数addr的一个闭包,这个闭包在内部引用了名字addend

返回一个函数引用

addend 又绑定到数值23  q=make_adder(42) 又产生另一个闭包,这次名字addend则绑定到了值42

def make_addr(addend):
    def adder(augend):return augend+addend
    return adder
p=make_addr(23)
print p
print p.func_name
print p(12)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/ddd/a6.py
<function adder at 0x025D0A70>
adder
35


def make_addr(addend):
    def adder(augend):return augend+addend
    print addend
    return adder
p=make_addr(23)
print p
print p.__name__
print p(12)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/ddd/a6.py
23
<function adder at 0x025D0A70>
adder
35

原文地址:https://www.cnblogs.com/hzcya1995/p/13349248.html