作者回复: 给函数命名也是一门学问
作者回复: 按照上面的写法,所有功能实现是在同一个函数中的,如果我想在其他函数里使用a、b、x变量而不想声明为全局变量怎么办呢? 这时候我们一般有两种解决办法,一种是面向对象编程语言的“类”,另一种就是函数编程里的“闭包”; 它是一个函数调用外部函数的非全局变量的一种用法,可以实现数据的隐藏。我们最常用的是它的另一种写法:装饰器; 函数式编程理解起来还是有一定难度的,建议先了解闭包的概念,看完它的应用--装饰器章节视频,再回头来理解会较为容易。
作者回复: lambda 表达式本身就是一个带返回值的函数,因此return lambda加上函数a_line的a b两个参数就已经组成了闭包。所以最后的return arg_y是多余的,建议再对lambda函数的演示代码执行一次,加深对匿名函数的理解。
作者回复: 闭包内存由解释器管理,闭包内层函数执行完,且没有对闭包的引用其堆内存自动销毁,关于python闭包内存资料较少,建议参考javascript闭包延时销毁的工作过程。推荐资料:JavaScript高级程序设计
作者回复: 可以用闭包方式实现柯里化,但是闭包更要注意变量的作用范围。
作者回复: 把lambda改写成一个带名字的函数就理解了,如果写成+=,相当于函数的返回值变成了 return cnt[0] = cnt[0] + 1 不符合语法。另外上面的lambda语句写法也不正确