Python闭包简谈

来源:互联网 发布:dhc瘦腿丸瘦腿原理知乎 编辑:程序博客网 时间:2024/06/08 02:03

对于大多数初学者来说,闭包这个名词很难理解。即使看了网上很多教程也是一脸茫然的样子,今天我也来谈谈Python闭包的话题:
首先,什么是闭包?百度百科:闭包包含自由(未绑定到特定对象)变量;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)(为什么不用谷歌去查,因为最近VPN没钱了)。看到这块的定义是不是感觉非常地困惑,不知道它在说什么?所以弄清楚闭包首先得要搞清楚两点:

1.变量的作用域:局部标量,全局变量;
2.对于函数的理解;
先看一个例子:

def test1():    def test2(y):        return y    return test2result=test1()print(result(2))

大家猜想下结果等于多少?结果是等于:2。再看个例子:

def test1(x):    def test2(y):        return x+y    return test2result=test1(3)print(result(1))

这次的结果等于多少?不用运行也知道是:4。大家如果能够看懂以上两个非常简单的例子,可以说对闭包有了一个初步的认识(相对于只知道概念,理论而言)

简单来说:在以上例子中。x想当于test2的环境变量,test2()就是函数块。所以综上所述:什么是闭包?闭包就是一个包含环境变量的函数对象。不过对于我来说,我更喜欢将环境变量(引用变量)称之为:变量纠缠(我自己定义的)。之所以那样叫是因为:引用不同的变量对于结果影响不同。

其实大家是在看不懂可以这样理解,不用管最外层的(test1)定义的函数。只管test2(),这就跟普通的函数其实并没有什么区别。只不过闭包相对于普通函数多了一层壳而已。