zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Linux学习之探索文件系统
    `设计模式之代理模式
    `设计模式之单例模式
    `设计模式之工厂模式
    浅谈系列之 javascript原型与对象
    Javascript基础
    jQuery效率提升建议
    CSS基础知识汇总
    CSS-float详解,深入理解clear:both[转+部分原创]
    HTML基础知识汇总
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349248.html
Copyright © 2011-2022 走看看