美文网首页
python闭包

python闭包

作者: 壁花烧年 | 来源:发表于2017-06-10 16:09 被阅读0次

    在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。在了解闭包之前,先了解一下函数的引用。

    def test():
        print('...test...')
    
    test()
    t1 = test
    t1()
    print(id(test))
    print(id(t1))
    
    print('*'*15)
    

    结果如下:


    函数的引用.jpg

    那闭包是如何在函数内引用函数的?看如下代码:

    def test(number):
        def test_in(number_in):
            print('test_in的number_in是:%s'%number_in)
            return number+number_in
        return test_in
    
    
    t1 = test(10)
    print(t1(20))
    print(t1(30))
    

    结果如下:


    闭包.jpg

    接下来看一个闭包的实际例子,定义一个函数曲线,给定x的值求y的值。

    def fun1(k,b):
        def fun1_in(x):
            print('x的值是:%s'%x)
            return k*x+b
        return fun1_in
    
    f1 = fun1(2,1)
    print(f1(3))
    

    结果如下:


    闭包实例.jpg

    这个例子中,函数fun1与变量k,b构成闭包。在创建闭包的时候,我们通过fun1的参数k,b说明了这两个变量的取值,这样,我们就确定了函数的最终形式(y=kx+b)。我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。
    如果没有闭包,我们需要每次创建直线函数的时候同时说明k,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。
    闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成。
    但由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存。

    相关文章

      网友评论

          本文标题:python闭包

          本文链接:https://www.haomeiwen.com/subject/zotcqxtx.html