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

  • 相关阅读:
    【算法研究】排序算法
    20121031 学习心得与体会
    循环有序数组查找(log(n))
    XmlDocument创建XML文档
    GCC地址对齐的2个方法
    打印getaddrinfo()返回的地址信息
    Java单例模式
    二叉搜索树的例子BST
    XmlTextWriter创建XML文档
    XmlDocument读取XML文档
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349248.html
Copyright © 2011-2022 走看看