使用哪个更合适:lambda函数或嵌套函数('def')?
问题内容:
我主要使用lambda函数,但有时使用似乎提供相同行为的嵌套函数。
这是一些琐碎的示例,如果在另一个函数中找到它们,它们在功能上会做同样的事情:
Lambda函数
>>> a = lambda x : 1 + x
>>> a(5)
6
嵌套功能
>>> def b(x): return 1 + x
>>> b(5)
6
使用一个相对于另一个有优势吗?(性能?可读性?局限性?一致性?等)
有关系吗 如果不是这样,那确实违反了Python原则:
问题答案:
如果您需要将分配lambda
给一个名称,请改用a def
。def
s只是分配的语法糖,因此结果是相同的,并且它们更具灵活性和可读性。
lambda
s只能 使用一次,丢弃 没有名称的函数。
但是,这种用例非常少见。您很少需要传递未命名的函数对象。
内建函数map()
和filter()
需要函数对象,但是 列表理解 和 生成器表达式
通常比那些函数更具可读性,并且可以覆盖所有用例,而无需使用lambda。
对于情况下,你真的需要一个小的函数对象,你应该使用operator
模块的功能,如operator.add
代替lambda x, y: x + y
如果您仍然需要一些lambda
未涵盖的内容,则可以考虑编写def
,以提高可读性。如果函数比operator
模块中的函数更复杂,则adef
可能更好。
因此,现实世界中的好用lambda
例很少见。