python闭包

2017-06-10  本文已影响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。这样,我们就需要更多的参数传递,也减少了代码的可移植性。
闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成。
但由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存。

上一篇 下一篇

猜你喜欢

热点阅读