• Switch
    2018-07-21
    lambda a, b: lambda x: a * x + b
    😂极简模式

    作者回复: 给函数命名也是一门学问

    
     4
  • cngzsunny
    2018-06-06
    最后改写成lambda表达式的这个示例有问题啊……
    def a_line(a,b):
            return lambda x: a*x+b
        return arg_y
     但是改成
    def a_line(a,b):
        arg_y = lambda x: a*x+b
        return arg_y
    又不是闭包形式了……
    展开

    作者回复: lambda 表达式本身就是一个带返回值的函数,因此return lambda加上函数a_line的a b两个参数就已经组成了闭包。所以最后的return arg_y是多余的,建议再对lambda函数的演示代码执行一次,加深对匿名函数的理解。

    
     2
  • 新的起点,新的开始^_...
    2018-10-24
    但是如果不用闭包更好写啊,为什么还要写闭包呢
    def cal(a, b, x):
        return a * x + b

    作者回复: 按照上面的写法,所有功能实现是在同一个函数中的,如果我想在其他函数里使用a、b、x变量而不想声明为全局变量怎么办呢?
    这时候我们一般有两种解决办法,一种是面向对象编程语言的“类”,另一种就是函数编程里的“闭包”;
    它是一个函数调用外部函数的非全局变量的一种用法,可以实现数据的隐藏。我们最常用的是它的另一种写法:装饰器;
    函数式编程理解起来还是有一定难度的,建议先了解闭包的概念,看完它的应用--装饰器章节视频,再回头来理解会较为容易。

    
     1
  • 倡印
    2019-12-23
    这里的闭包感觉就像 重载
    
    
  • ttttt
    2019-09-14
    讲的真好,通俗易懂,以前不懂得地方终于搞懂了。
    
    
  • coder
    2019-09-01
    这种闭包的写法,是不是就是函数的柯里化啊?

    作者回复: 可以用闭包方式实现柯里化,但是闭包更要注意变量的作用范围。

    
    
  • 从前慢
    2018-07-14
    def counter(first=0):
          cnt[0]=first
          return lambda : cnt[0] += 1
    老师我想问下这里的lambda表达式为什么会报错,改成cnt[0] + 1的话就可以,但是起不到计数的作用,我想是把前面的代码用lambda表达式试一试,可是不成功,该如何修改这个返回值

    作者回复: 把lambda改写成一个带名字的函数就理解了,如果写成+=,相当于函数的返回值变成了
    return cnt[0] = cnt[0] + 1
    不符合语法。另外上面的lambda语句写法也不正确

    
    
我们在线,来聊聊吧