lambda匿名函数,为何执行效率高呢?(如果长处不是效率,那lambda长处在哪里?)

zwth001 2010-08-07 10:17:08
lambda匿名函数,为何执行效率高呢?(如果长处不是效率,那lambda长处在哪里?)
>>> a=lambda x,y:x+y
>>> a(1,2)
3
>>> def b(x,y):
return x+y

>>> b(1,2)
3

以上是用两种方式,第一是用 lambda,第二是用普通的函数,
二者的本质区别在哪里呢?我看到的惟一区别,就是 lambda 可以将函数体写在同一行上。

另外,lambda 函数只能将代码写在一行,我不是有局限性吗?如果比较复杂的函数,一行肯定写不下呀?
是不是只有特别简单的功能,才会用到 lambda 函数呢?

还有:lambda 的含义是什么,这个单词的意思,并不是“匿名” 的意思呀?


...全文
1051 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
notax 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fibbery 的回复:]

我的理解,可能是类似于宏或者inline函数,只有短小的代码才合适,再调用时不会产生函数调用堆栈,这样会提高运行效率。
[/Quote]

lambda再调用时可能会产生不同的函数调用堆栈 ,

>>> lambda x: x+1
<function <lambda> at 0xb7c034ac>
>>> lambda x: x+1
<function <lambda> at 0xb7c035ec>
>>> lambda x: x+1
<function <lambda> at 0xb7c0386c>
>>> lambda x: x+1

list comprehension 比起 map 加 lambda 更快
cmlr_ 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fibbery 的回复:]

我的理解,可能是类似于宏或者inline函数,只有短小的代码才合适,再调用时不会产生函数调用堆栈,这样会提高运行效率。
[/Quote]

inline的确是有助于提高效率,但是lambda没有这一说,提高效率可能是指提高`代码编写效率`.
cmlr_ 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zwth001 的回复:]

lambda与内联函数不一样吗?
也会产生函数调用的栈吗?
[/Quote]
这个...应该是的(我不太确定),lambda应该是要产生函数调用的栈.
匿名函数,依然是函数,不像inline一样做一种近似于替换的作用,而是确实的作为函数
和inline的唯一共同点就是不支持比较复杂的代码,只是很简单的一点片段.
zwth001 2010-08-08
  • 打赏
  • 举报
回复
lambda与内联函数不一样吗?
也会产生函数调用的栈吗?
I_NBFA 2010-08-08
  • 打赏
  • 举报
回复
没听说过lambda效率更高, 不过它们一般都比较短小精悍, 可能就"高"在这吧.
cmlr_ 2010-08-08
  • 打赏
  • 举报
回复
代码支离破碎,好吧,再发一次
[code=c++]

if __name__ == '__main__':
a = 'a i e u o'.split()
a.sort(lambda x,y:1 if y>x else -1) #这样可以简单的写,顾名思义:匿名函数,我们不需要名字,只需要它的功能就够了
#如果用定义函数,就要这样写
def compare(x,y):
return 1 if y>x else -1
a.sort(compare)
#用lambda一句就可以搞定的代码,却要写上这么多,而且为这一个调用要专门写一个函数定义,可读性也不如lambda
print a[/code]
cmlr_ 2010-08-08
  • 打赏
  • 举报
回复
lambda函数貌似没有效率优势啊?至少官方没有这种说法..
lambda的优势就是可以写在一行上的,这种函数能很方便地嵌入在函数体中,在处理简单的函数时候,写起来会简单,方便很多,且不会破坏代码书写结构(lambda就是可以写在条语句中,作为一个参数,或者一个)

比如

if __name__ == '__main__':
a = 'a i e u o'.split()
a.sort(lambda x,y:1 if y>x else -1) #这样可以简单的写,顾名思义:匿名函数,我们不需要名字,只需要它的功能就够了
#如果用定义函数,就要这样写
def compare(x,y):
return 1 if y>x else -1
a.sort(compare)
#用lambda一句就可以搞定的代码,却要写上这么多,而且为这一个调用要专门写一个函数定义,可读性也不如lambda
print a

用lambda一开始会不太习惯,不过用久了你会觉得lambda的确也很方便
fibbery 2010-08-08
  • 打赏
  • 举报
回复
楼主确实测试过吗?第一种确实比第二种执行效率高吗?
angel_su 2010-08-08
  • 打赏
  • 举报
回复
觉得只是书写上的简洁方便,执行效率上不用考虑吧。
iambic 2010-08-08
  • 打赏
  • 举报
回复
lambda可以直接嵌到表达式里。这一个特点就够了。写代码要先学会写正确的代码,然后学会写优雅的代码,代码怎么方便就怎么写,该怎么写就怎么写。当你开始(并且被允许)用最方便的方式写代码时,你就明白语言的区别在于表达了。不同的东西,提供不同的表达方式。
忘掉效率。如果你用C++,忘掉内联函数,那是一个被教科书过度炒作的概念。也不要做对效率的莫名其妙的臆想。语言里的元素应该是为了表达而生的,不是效率或者其他什么。
lambda继承自lisp,名字源于lambda calculus,数学里的一个概念。
fibbery 2010-08-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cmlr_ 的回复:]
引用 1 楼 fibbery 的回复:

我的理解,可能是类似于宏或者inline函数,只有短小的代码才合适,再调用时不会产生函数调用堆栈,这样会提高运行效率。


inline的确是有助于提高效率,但是lambda没有这一说,提高效率可能是指提高`代码编写效率`.
[/Quote]
嗯,是的。如果在效率上没有提高的话,肯定和普通函数是一样的,如果效率有提高的话,我推测是inline了,只是推测。
fibbery 2010-08-07
  • 打赏
  • 举报
回复
我的理解,可能是类似于宏或者inline函数,只有短小的代码才合适,再调用时不会产生函数调用堆栈,这样会提高运行效率。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧