使用哪个更优选:lambda函数或嵌套函数('def')?

我主要使用lambda函数,但有时使用似乎提供相同行为的嵌套函数。


这是一些琐碎的示例,如果在另一个函数中找到它们,它们在功能上会做同样的事情:


Lambda函数


>>> a = lambda x : 1 + x

>>> a(5)

6

嵌套功能


>>> def b(x): return 1 + x


>>> b(5)

6

使用一个相对于另一个有优势吗?(性能?可读性?局限性?一致性?等)


Helenr
浏览 510回答 3
3回答

慕斯709654

如果需要将分配lambda给名称,请改用a def。defs只是分配的语法糖,因此结果是相同的,并且它们更具灵活性和可读性。lambdas只能使用一次,丢弃没有名称的函数。但是,这种用例很少见。您很少需要传递未命名的函数对象。内建函数map()和filter()需要函数对象,但是列表理解和生成器表达式通常比那些函数更具可读性,并且可以覆盖所有用例,而无需使用lambda。对于情况下,你真的需要一个小的函数对象,你应该使用operator模块的功能,如operator.add代替lambda x, y: x + y如果您仍然需要一些lambda未涵盖的内容,则可以考虑编写def,以提高可读性。如果功能比operator模块中的功能更复杂,则a def可能更好。因此,现实世界中的好用lambda例非常少见。

精慕HU

实际上,对我来说有两个区别:首先是关于他们做什么以及他们返回什么:def是不返回任何内容并在本地名称空间中创建“名称”的关键字。lambda是一个关键字,它返回一个函数对象,并且不在本地名称空间中创建“名称”。因此,如果需要调用带有函数对象的函数,则在一行python代码中执行此操作的唯一方法是使用lambda。def没有等效功能。在某些框架中,这实际上是很常见的。例如,我经常使用Twisted,d.addCallback(lambda result: setattr(self, _someVariable, result))是很常见的,并且对lambda更为简洁。第二点区别是允许实际执行的功能。用'def'定义的函数可以包含任何python代码用“ lambda”定义的函数必须求值为表达式,因此不能包含诸如print,import,raise,...之类的语句。例如,def p(x): print x如预期般运作lambda x: print x是一个SyntaxError。当然,也有变通方法-代替print用sys.stdout.write,或import用__import__。但是通常情况下,最好还是使用一个函数。

有只小跳蛙

Guido van Rossum 在这次采访中说,他希望自己不要让“ lambda”进入Python:“ 问:您最不满意Python的什么功能?有时候我接受捐助太快了,后来才意识到这是一个错误。一个例子就是一些函数式编程功能,例如lambda函数。lambda是一个关键字,使您可以创建一个小的匿名函数;诸如map,filter和reduce的内置函数可以在序列类型(如列表)上运行该函数。在实践中,结果并非如此。Python只有两个范围:本地和全局。这使编写lambda函数很痛苦,因为您经常想在定义了lambda的作用域中访问变量,但由于这两个作用域而不能。有办法解决这个问题,但这有点不合时宜。通常,在Python中仅使用for循环而不是搞乱lambda函数似乎容易得多。只有当已有内置功能可以满足您的需求时,地图和朋友才能正常工作。恕我直言,Iambdas有时可能很方便,但是通常以可读性为代价很方便。你能告诉我这是怎么做的:str(reduce(lambda x,y:x+y,map(lambda x:x**x,range(1,1001))))[-10:]我写了它,花了我一分钟才弄清楚。这是来自欧拉计划-我不会说哪个问题,因为我讨厌剧透,但是它只需要0.124秒即可:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python