zoukankan      html  css  js  c++  java
  • python 学习笔记 8(闭包)

    30.  闭包

    首先理清几个关系。

    • 函数式编程
    • 面向对象编程 : 对象
    • 面向过程编程 : 函数

    对象和函数都是一种逻辑方式来组织代码,为了提高可重复利用性(reusability)。

    而闭包作用和对象和函数一样。python的闭包是函数对象为基础实现的。

    1. 函数对象的作用域

    函数是由def定义的,其作用域与def的层级相同

    def line_conf():     # within the scope  begin
        def line(x):     # within the scope
            return 2*x+1 # within the scope
        print(line(5))   # within the scope  end

    2. 闭包

     函数作为一个对象,可以作为另外一个函数的返回结果。

    这种把函数作为参数传递给其他函数,得到的函数语句与执行环境一起称为闭包。

    def line_conf():
        def line(x):
            return 2*x+1
        return line       # return a function object
    
    my_line = line_conf() # 把返回的函数对象保存给一个变量,变量就变成一个函数了
    print(my_line(5))     

    环境变量   在一个函数之外定义的,高层级的变量就是它的环境变量。

    闭包  

    一个包含有环境变量取值的函数对象。

    闭包的__closure__属性保存着环境变量的取值,是一个元组。

    print(myline.__closure__)                         #查看__closure__ 的值

    print(myline.__closure__[0].cell_contents)  #把环境变量的值赋给闭包函数

    def line_conf(a, b):
        def line(x):
            return a*x + b
        return line
    
    line1 = line_conf(1, 1)  #y=x+1
    line2 = line_conf(4, 5) #y=4x+5

    如上,函数与环境变量a和b构成闭包,然后可以直接轻松构造任意直线。

    每次只需要变换a和b的值,提高了代码的可重用性。

    3. 闭包与并行计算 http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html

    不懂???

  • 相关阅读:
    char*,const char*和string的相互转换[转]
    1.0到2.0 的变化
    Hello项目分析
    VS上编译Lua5.1.4生成静态库
    cocos2dx 自带动画
    asp.net2.0安全性(Login系列控件)
    用js实现的对css的一些操作方法
    mapxtreme开发小结3(c#)
    asp.net页面事件执行顺序
    access与SqlServer 之时间与日期及其它SQL语句比较
  • 原文地址:https://www.cnblogs.com/skyEva/p/5468868.html
Copyright © 2011-2022 走看看