本文转载自微信公众号“东方儿”,作者东方儿。转载本文请联系东方儿公众号。任何将函数视为一等对象的语言,它的设计者都不得不面对一个问题:作为一等对象的函数是在某个范围内定义的,但可能在其他范围内被调用,如何处理自由变量?自由变量是未绑定在局部范围内的变量。为了解决这个问题,Python之父GuidoVanRossum设计了闭包,闭包犹如神来之笔,将代码美学发挥得淋漓尽致。在讨论闭包之前,有必要了解Python中的变量作用域。变量作用域先看一个全局变量和自由变量的例子:>>>b=6>>>deff1(a):...print(a)...print(b)...>>>f1(3)36函数体外面的b是全局变量,函数体里面的b是自由变量。因为自由变量b绑定了全局变量,所以在函数f1()中可以正确打印。如果稍作改动,那么函数体中的b就会由自由变量变为局部变量:>>>b=6deff1(a):...print(a)...print(b)...b=9...>>>f1(3)3Traceback(mostrecentcallast):File"",line1,in
