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

  • 相关阅读:
    webshell
    FireFox与IE开发上的一些区别
    面向对象的Jscript(顶)
    CSS背景属性
    [转]javascript中style.left和offsetLeft的使用
    BLOG排版小窍门
    面向对象的JavaScript编程
    Js脚本:动态添加HTML自定义属性以及处理html元素的自定义属性(兼容Firefox和IE)
    lookupedit 设置选项值
    comboboxEdit 不能输入,只能选择
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349226.html
Copyright © 2011-2022 走看看