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. Vespa

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

    • Leniy

      Mathematica,强大的工具,对于其高级的绘图功能超爱

    • Vespa

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

    • Leniy

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

    • Vespa

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

    • Leniy

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

    • Vespa

      纯函数就是等价于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文比较拗口,相反给的例子很直观啊。

    • Leniy

      这是python中用起来比较晕的一个函数。python本身语法很正规的

    • Yu

      python老正规了,管代码规则就算了,连代码风格都管 — 真是, 多管闲事

    • Yu

      回复的是这个”python规则是否正规”这个讨论

      个人觉得是正规,但是矫枉过正了

发表评论

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