zoukankan      html  css  js  c++  java
  • python 闭包

    闭包(closure)是函数式编程的重要的语法结构,函数式编程是一种编程范式(而面向过程编程和面向对象编程也都是编程范式)
    
    在面向过程编程中,我们见到过函数(function)
    
    不同的语法实现闭包的方式不同,python以函数对象为基础,为闭包语法结构提供支持的
    
    
    def line_conf(a, b):
        def line(x):
            return a*x + b
    
        return line
    a=line_conf(3,4)
    print a
    print type(a)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a6.py
    <function line at 0x021E0A70>
    <type 'function'>
    
    Process finished with exit code 0
    
    
    def line_conf(a, b):
        def line(x):
            return a*x + b
    
        return line
    a=line_conf(3,4)
    print a
    print type(a)
    
    print a(6)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a6.py
    <function line at 0x021A0A70>
    <type 'function'>
    22
    
    由于python的静态嵌套域,如我们早先看到的,定义内部函数变得很有用处。在下面的部分中,
    
    我们将着重讨论作用域和lambda,但是在python2.1之前,当作用域规则变为今天这样之前,内部函数也会遭受相同的问题。
    
    
    简单的闭包例子:
    
    下面是使用闭包简单的例子,我们会模拟一个计数器,同样也通过将整数包裹位一个列表的单一元素来模拟使整数
    
    def counter(start_at=0):
        x=start_at
        def incr():
            y=x+9
            return y
        return incr
    count=counter(5)
    print count()
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a7.py
    14
    
    counter()做的唯一一件事就是接受一个初始化的值来开始计数,并将该值赋给列表count唯一一个成员。
    
    然后定义一个incr()的内部函数。
    
    通过在内部使用变量count,我们创建了一个闭包因为它现在携带了整个counter()作用域。
    
    然后最后的魔法就是counter()返回一个inct,一个可调用的函数对象。
    
    

  • 相关阅读:
    【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类
    JAVA详设——UML(用例图、类图、时序图)
    FreeTDS-SQL Server在linux和unix下的免费驱动
    【转】移动oracle LOB索引到其他表空间
    [转载]JDBC读写Oracle的CLOB、BLOB
    JProgressBar与Timer的配套使用
    网页美工设计及源码
    分析SignalTap的仿真结果
    用SignalTap进行硬件仿真
    单周期CPU设计的理论基础
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349226.html
Copyright © 2011-2022 走看看