• 11-[函数进阶]-闭包


    1.什么是闭包?

      内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。

    def outer():
        n = 10
    
        def inner():
            print("inner:", n)
    
        return inner
    
    val = outer()
    print(val)
    val() 

     

    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

    2.闭包再理解

    •  计算 y = a*x +b 的值
    # 旧方法
    def calc(a,b,x):
        return a*b+x
    
    print(calc(1,2,3))   # y = 1*2+3
    print(calc(2,3,4))
    # 闭包方法
    def outer(a,b):
        def calc(x):
            print(a*b+x)
    
        return calc
    
    val = outer(1,2)
    print(val)
    val(3)

    这个例子中,函数line与变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个变量的取值,这样,我们就确定了函数的最终形式(y = x + 1和y = 4x + 5)。

    我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。

    如果没有闭包,我们需要每次创建直线函数的时候同时说明a,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。

    闭包思考:
    
    1.闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成
    2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存
  • 相关阅读:
    添加活动记录的小坑
    用windows的批处理文件批量更改文件后缀
    js日期的初始化的格式
    对象的继承
    关于换行字符的问题
    js获取dom对象style样式的值
    判断邮箱是否合法
    Python控制函数运行时间
    如何用python编写一个计时器的程序
    TF-IDF算法介绍及实现
  • 原文地址:https://www.cnblogs.com/venicid/p/8431202.html
Copyright © 2020-2023  润新知