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

  • 相关阅读:
    在最近在研究榴莲品种的人工智能识别
    iOS开发:多线程技术概述
    Objective-C开发编码规范
    为什么OC语言很难
    内存堆栈的区别
    HR筒子说:程序猿面试那点事
    Objective-C语言的一些基础特性
    学习swift语言的快速入门教程推荐
    性能测试告诉你 mysql 数据库存储引擎该如何选?
    【柠檬班】需要先登录的接口如何做性能测试?
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349226.html
Copyright © 2011-2022 走看看