关于lamda做什么的问题

嘿, 在过去的几个月中,我一直在学习Python,但我似乎可以 得到lamda的目的. 我会用什么lamda为我 不能或不会使用DEF? 有明显的区别吗? 我只问,因为我在互联网上和IN中看到了代码样本 图书. 感谢您的清晰度 SK

# 回答1

netexity@xit.net写道: 它定义一个函数. f = lambda x,y:表达 等同于 def f(x,y): 返回表达式 请注意,lambda是一种表达,而def是一种语句. lambdas通常用作采用功能的参数 用作参数,例如属性()和redain(). 你永远不需要 * 使用一个,但有时很方便.
# 回答2

好的,我想我明白了. 很酷. 谢谢 -sk 丹·毕晓普(Dan Bishop)写道: 它定义一个函数. f = lambda x,y:表达 等同于 def f(x,y): 返回表达式 请注意,lambda是一种表达,而def是一种语句. lambdas通常用作采用功能的参数 用作参数,例如属性()和redain(). 你永远不需要 * 使用一个,但有时很方便.
# 回答3

在任何地方都需要对函数的快速定义,可以是 写为表达. 例如,当回调函数为 您可以说: def回调(x,y): 返回x*y soming_function(_done_call_this =回调) 但是有了lambda,你可以写 soming_function(_done_call_this = lambda x,y:x*y) 注意:因为它是_expression _,您不能做诸如'if .. else'之类的事情 在Lambda内部. -Nick V. nethedheythy@xit.net写道:
# 回答4

因此,LAMDA需要保持一个表情,并使用多个LAMDA 更多表达式? 我想我明白了. SK 尼克·瓦塔马尼克(Nick Vatamaniuc)写道:
# 回答5

使用def和使用lambda之间的两个主要区别是 lambda仅限于单个表达式,并且在内部无法使用DEF 另一个功能. 基本上,当您需要定义一个小功能时,请使用lambda 另一个功能. 我还使用它来创建"快捷"函数为: bar = lambda a,b:object1.object2.function1(a).function2(b) foo = bar(somevalue1,somevalue2) 如果明智地使用,它可以为您节省很多打字,并制作代码 较小且更整洁:) 在现实世界中的例子: 导入随机 roll_die = lambda侧= 6:random.Choice(范围(1,侧+1)) #滚动死亡4、6和20侧 print roll_die(4),roll_die(),roll_die(20) 与您的Lambdas玩得开心. greb nexexit.@xit.net写道:
# 回答6

gr xhitdyde*@gmail.com写道: 当然可以在另一个功能中使用" DEF": def make_adder(delta): Def Adder(X): 返回X +三角洲 返回加法器 [sreeram;] -----开始PGP签名------------- 版本:gnupg v1.4.2.2(mingw32) 评论:将gnupg与mozilla一起使用-http://enigmail.mozdev.org ID8DBQFEVQNJRGN0PLK5QQURAJQXAKCMZ0WV/0ZAFW/EN4IVHGMZTXZWDQCGRYWH ROS510R1W1GTDB+5NQJ1CFQ = = ISGG -----结束pgp签名-----
# 回答7

gr xhybedydeyde@gmail.com wro TE: 你到底从哪里得到的? 我想你的意思是"你不能使用 DEF语句作为函数的参数? 没有错 Def Adder(X): def func(y): 返回x+y 返回功能 例如. 然后加法器(5)返回一个函数,该功能比 它的论点. 问候 史蒂夫 - - 史蒂夫·霍顿+44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype:Holdenweb http://holdenweb.blogspot.com 最近的漫画http://del.icio.us/steve.holden
# 回答8

lambda与功能一样强大,但完全没有用= -p Lambda在引入列表综合之前曾经很方便. 但是,现在,主要用途是使您的代码混淆.
# 回答9

我站立了. 不知道我从哪里得到的,不当 由于睡眠堕落引起的碎片碎片可能... K.S.Sreeram写道: 当然可以在另一个功能中使用" DEF": def make_adder(delta): Def Adder(X): 返回X +三角洲 返回加法器 [sreeram;] ---------------- ENIGFDB411206B54B101CC680F5A 内容类型:应用程序/PGP签名 内容分解:内联; 文件名=" signature.asc" 内容描述:OpenPGP数字签名 X-Google-Attachsize:253
# 回答10

TAC TICS写道: lambda与功能一样强大,但完全没有用= -p Lambda在引入列表综合之前曾经很方便. 但是,现在,主要用途是使您的代码混淆. 我希望您能阻止自己,停止泥泞的水域. lambdas和列表综合与每个人几乎没有关系 其他. 除非你知道我不知道... 问候 史蒂夫 - - 史蒂夫·霍顿+44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype:Holdenweb http://holdenweb.blogspot.com 最近的漫步http://del.icio.us/steve.holden
# 回答11

史蒂夫·霍顿(Steve Holden)写道: lambda与功能一样强大,但完全没有用= -p Lambda在引入列表综合之前曾经很方便. 但是,现在,主要用途是使您的代码混淆. 我希望您能阻止自己,停止泥泞的水域. lambdas和列表综合与每个人几乎没有关系 其他. 除非你知道我不知道... 我认为他的意思是Lambda之前的主要用途是在地图中 筛选; 如该线程前面所述,Lambda的主要用途是 将简单函数作为参数传递,这些地图和过滤器必须 已经组成了多数(然后我想TKINTER将是下一个). 列表综合替换地图和过滤器,所以... 我不会像他那样爆炸地说,但我发现更lambda少了 也比防御清晰. iain
# 回答12

netexity@xit.net写道: 呵呵. 对于来的pythoners来说 来自LISP. Guido更像是一个C的家伙,并不真正喜欢他们,并且 认为应该在py3k中删除它们. 上次我che CKED,他是 重新考虑公众强烈抗议,大概是来自LISP人群的. 摆脱它的标准原因是"您需要的任何地方 lambda,您可以使用def".除了这里所说的话, Lambda和功能之间还有另一个小区别, 这就是当您使用DEF时,对象获取名称: ... # ^ foo知道自己的名字 # ^见;) 而Lambda没有名字; 这是"匿名": <功能 # ^垃圾邮件有身份危机;) 许多不来自LISP的人不明白 lambda是(我不知道拥有名称的目的是什么). 甚至确实质疑它是否属于Python的人. 在LISP, lambda是做事的方式,因为您可以计算 任何使用的任何内容都可以定义和表达式. 这种风格不合适 Python非常好,因为我们使用语句做事. Python的Lambda真的不能像LISP那样强大,因为Python 没有进行案例分析的表达式(这不是Lambda的 故障,当然;). 原因是您真的想把 案例以其自己的线路集. 这可以增强可读性 简洁. 由于Python的陈述已被Newline终止,因此 拥有一种很好的风格的表情会很尴尬 要求将其散布的多行分散. 您可以尝试使用列表中模拟这些类型的表达式或 词典,但这变得杂乱无章. 我认为获得的唯一方法 正确完成的是使用评估. 例如: def递归功能(args): ... # 做东西... 选择= {true:" 0",false:" recurisveFunction(newargs)"} 返回评估(选择[谓词]) 您需要评估的原因是您要防止任何情况 从被执行到决定要哪个. 这个住宿 执行是通过围绕我们的表达方式包裹的引号来完成的. 这个示例说明了为什么我们真正需要这种行为, 因为没有它,我们将陷入无限的循环. 即使是 可以安全地评估所有情况,这是一个很大的浪费时间. 最后,我认为某些用途也存在性能 lambda(如果我错了,请纠正我). 说你有一个表达 lambda在其中您可以使用DEF. 每次评估 该表达式,您必须构造一个新的lambda对象 时间. 如果您使用了DEF,则可以避免 多次构建.
# 回答13

嘿,谢谢您的最后一篇文章,尽管其中有些有点 头. 我想我在这里有更多的差异. 再次感谢, SK Danielx写道: 呵呵. 对于来的pythoners来说 来自LISP. Guido更像是一个C的家伙,并不真正喜欢他们,并且 认为应该在py3k中删除它们. 上次我Chec 凯德,他是 重新考虑公众强烈抗议,大概是来自LISP人群的. 摆脱它的标准原因是"您需要的任何地方 lambda,您可以使用def".除了这里所说的话, Lambda和功能之间还有另一个小区别, 这就是当您使用DEF时,对象获取名称: ... # ^ foo知道自己的名字 # ^见;) 而Lambda没有名字; 这是"匿名": <功能 # ^垃圾邮件有身份危机;) 许多不来自LISP的人不明白 lambda是(我不知道拥有名称的目的是什么). 甚至确实质疑它是否属于Python的人. 在LISP, lambda是做事的方式,因为您可以计算 任何使用的任何内容都可以定义和表达式. 这种风格不合适 Python非常好,因为我们使用语句做事. Python的Lambda真的不能像LISP那样强大,因为Python 没有进行案例分析的表达式(这不是Lambda的 故障,当然;). 原因是您真的想把 案例以其自己的线路集. 这可以增强可读性 简洁. 由于Python的陈述已被Newline终止,因此 拥有一种很好的风格的表情会很尴尬 要求将其散布的多行分散. 您可以尝试使用列表中模拟这些类型的表达式或 词典,但这变得杂乱无章. 我认为获得的唯一方法 正确完成的是使用评估. 例如: def递归功能(args): ... # 做东西... 选择= {true:" 0",false:" recurisveFunction(newargs)"} 返回评估(选择[谓词]) 您需要评估的原因是您要防止任何情况 从被执行到决定要哪个. 这个住宿 执行是通过围绕我们的表达方式包裹的引号来完成的. 这个示例说明了为什么我们真正需要这种行为, 因为没有它,我们将陷入无限的循环. 即使是 可以安全地评估所有情况,这是一个很大的浪费时间. 最后,我认为某些用途也存在性能 lambda(如果我错了,请纠正我). 说你有一个表达 lambda在其中您可以使用DEF. 每次评估 该表达式,您必须构造一个新的lambda对象 时间. 如果您使用了DEF,则可以避免 多次构建.
# 回答14

Danielx写道: (剪) 您为什么要在这里使用评估? 关于什么: def递归功能(args): ... # 做东西... ...#定义" newargs"和"谓词"当然... 返回(递归功能,lambda x:0)[predicate](newargs) - - Bruno Desthuilliers python -c" print'@'.join(['.'.join([w [::-1] for p.split('.'.')]) p in'o = @xiludom.gro'.spli t('@')))"
# 回答15

Bruno Desthuilliers写道: 您为什么要在这里使用评估? 关于什么: def递归功能(args): ... # 做东西... ...#定义" newargs"和"谓词"当然... 返回(递归功能,lambda x:0)[predicate](newargs) 当然,这有效,但不要从字面上看待事情. 例如,如果 您有很多案例,您可能无法应用相同的一组 向所有人争论. 另外,让我们不要从主要的角度分心 表达中的分析很丑陋,使lambda在python中较弱 而不是启发他们的语言.
# 回答16

Danielx写道: 表达式可以跨越几行. 或通过';' 我一定很愚蠢,但是我看不出这与问题的问题有何关系 lambda表达式中的案例分析? 您为什么要在这里使用评估? 关于:def递归功能(args):...#做事... ...#定义" newargs"和"谓词"当然...返回(recursivefunction,lambda x:0) ) 当然,这有效,但不要从字面上看待事情. 很抱歉务实! - ) 返回 { 'case1':lambda:somefunc(args1), 'case2':lambda:somefunc(args2), 'case3':lambda:某些hotherfunc(args1,arg42), } .get(predicate,lambda:0)() 仍然不需要评估()... 现在,练习有限制,我们仍然很远 从类似ML的图案匹配或LISP"案例"形式. 正如您指出的,Python 是一种基于语句的语言,而不是像LISP这样的基于表达式的语言. 这有明确的改变. 丑陋在情人眼中 事实是,python" lambdas"不是 * lisp lambdas. Python " lambdas"主要是将 *简单 *表达式变成一个的方便技巧 封闭 - 绝对不是语言的基本构建基础. 丹尼尔,我当然同意Python Lambdas在LISP附近没什么 lambdas -fwiw,python并非都不是 - 但看起来像个 苹果和香蕉与我的比较...恕我直言,最明显的问题 Python Lambdas是" Lambda"一词! - ) - - Bruno Desthuilliers python -c" print'@'.join(['.'.join([w [::-1] for p.split('.'.')]) p in'O ****@xiludom.gro'.split('@')])"

标签: python

添加新评论