Python生成并返回新函数(lambda)

lambda expression

An anonymous inline function consisting of a single expression which is evaluated when the function is called. The syntax to create a lambda function is:
lambda [arguments]: expression


Lambda forms (lambda expressions) have the same syntactic position as expressions. They are a shorthand to create anonymous functions; the expression lambda arguments: expression yields a function object. The unnamed object behaves like a function object defined with

Note that functions created with lambda forms cannot contain statements.

解析lambda用法

语法等同于表达式、被调用时由参数动态生成什么的。看了例子才知道,不就是个子函数嘛。这段官方文档好拗口。
可见,lambda可用来生成新函数并将其返回
例如:

执行后输出的结果为1+2+3=6

作者: Leniy

Do not , for one repulse , give up the purpose that you resolved to effect . 本文著作版权归Leniy所有,并受法律保护。 转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。 CopyRight © 2006-2017 Leniy.org all rights reserved.

36 thoughts on “Python生成并返回新函数(lambda)

  1. lambda配合reduce,filter,map等函数使用简直神器~【因为很爱Mathematica里面的纯函数机制,所以也很爱lambda

      • reduce,filter这些都很好的体现了py的函数式编程的能力;Mma用惯了就很少用Matlab画图了。。

        • Leniy

          我只在信号处理中处理矩阵时用matlab比较多。看了个reduce累加的示例代码,发现果然好强大

          • 嗯,很多迭代计算我就是一行reduce完成;之所以很爱这个函数也是因为Mathematica(没错,又是它。。)里面有很多类似的迭代函数,甚至可以返回中间迭代的过程值

            • Leniy

              哦,原来如此。我本人没有实际动手使用过Mathematica,对于纯函数处理的机制不是很清楚。返回中间迭代的过程值,这个功能好。我只在excel中使用过类似的公式追踪功能

              • 纯函数就是等价于lambda,一个匿名函数,不过Mma里面定义更加简单,一个&符号就表示一个纯函数,然后输入参数用#1,#2,#3表示,##表示全部参数,#0表示lambda函数自身(纯函数递归神器),举个例子就是#1+#2+#3&就是一个lambda函数,If [#1 == 1, 1, #1 * #0[#1 – 1] ] &就是一个计算阶乘的递归lambda函数。。。【好吧,但愿你能懂。。。

                • Leniy

                  虽然不是很明白,不过这同编写带参数的命令行程序差不多,第一个参数$0就是程序本身的名字,有时默认输出help,第二个开始的参数$1、$2就是真正的参数了

                    • Leniy

                      先编写带参数的命令然后bash混乱调用的情况下,我能理的清逻辑关系,但不知道为什么直接在代码中使用lambda就经常出现逻辑错误。可能我在这方面没有一点儿天分,就好像玩扑克牌一样。

  2. Yu

    c 里面复现困难,不过第一次见到这种是在go 里面

      • Leniy

        用define的确方便些,但不知道能不能传输参数。
        记得预编译时是直接替换的吧?

        • Yu

          预编译时候直接替换,不过在写代码的时候可以写得看起来和普通函数一样.

          比如
          #define MX(x) MX_x
          这么玩

          • Leniy

            恩恩,就这么玩。特别是需要混淆代码增加别人的浏览难度时,经常这么搞。
            例如先include一个文件,里面数百个define,几乎都是一一对应,就放个别几个保留稍微的区别,一般很难被发现

    • Leniy

      你这里面include的是什么库?小写的书名号被自动屏蔽了,看不到

      C语言中的callback对象从来没用过,准确来说这是我第一次听说这个

      • Yu

        很多地方用到,比如sqlite什么的.最初我是显式调用dll接触到的.

        include 的是 stdio.h
        printf 需要用到

        • Yu

          哦,还忘了一个很多人最常用的callback了
          windows api 的主窗口的消息机制就是使用的这个callback的手法

          • Leniy

            没正式接触过windows api,需要绘制窗口时正常情况我都用wxwidgets或wxpython。

        • Leniy

          stdio.h加进去了。
          我在fortran中用过动态dll,不过自定义函数接口中输入输出都是采用的数组,没用过callback这么高级的方法

    • Leniy

      我怎么觉得官方文档中,这段E文比较拗口,相反给的例子很直观啊。

发表评论

电子邮件地址不会被公开。 必填项已用*标注