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,一个可调用的函数对象。
    
    

  • 相关阅读:
    Asp.NET 4.0 ajax实例DataView 模板编程1
    ASP.NET 4.0 Ajax 实例DataView模板编程 DEMO 下载
    部分东北话、北京话
    .NET 培训课程解析(一)
    ASP.NET 4.0 Ajax 实例DataView模板编程2
    ASP.NET Web Game 架构设计1服务器基本结构
    ASP.NET Web Game 构架设计2数据库设计
    TFS2008 基本安装
    Linux上Oracle 11g安装步骤图解
    plsql developer远程连接oracle数据库
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349226.html
Copyright © 2011-2022 走看看