闭包:
闭包(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