Python中什么情况下应该使用匿名函数lambda

发布于 2022-08-24 10:27:35 字数 168 浏览 12 评论 0

被Python的匿名函数lambda搞得一头雾水。
一直都是用def来创建函数的,最近又看到很多lambda来申明函数的,不知道这二者的用途有什么区别。
def创建的函数是可以多次调用的,而lambda却不可以,那么,为什么有时候要使用lambda呢?
他创建的函数而且很难读懂耶。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

滥情稳全场 2022-08-31 10:27:36

lambda函数一般是在函数式编程中使用的。通常学习的C/C++/Java等等都是过程式编程,所以不常接触lambda函数。

其实这货在C++中已经有所运用了,如果对stl的迭代器比较熟悉的话,就会知道里头的foreach等函数,需要给一个函数,这对于C/C++这种古老的语言来说比较痛苦,一般是在主函数外再写一个函数,然后传入函数指针,看起来非常不直观。boosts用一些特殊的语法技巧实现了C++的lambda。

举个栗子,对于这样一个list L,求L中大于3的元素集合

L = [1, 2, 3, 4, 5]

对于过程式编程,通常会这么写

L3 = []
for i in L:
    if i > 3:
        L3.append(i)

而对于函数式变成,只需要给filter函数一个判断函数就行了

def greater_than_3(x):
    return x > 3
L3 = filter(greater_than_3, L)

由于这个判断函数非常简单,用def写起来太累赘了,所以用lambda来实现就非常简洁、易懂

L3 = filter(lambda x: x > 3, L)

这是个很简单的例子,可以看出lambda的好处。lambda函数更常用在map和reduce两个函数中。

当然,lambda函数也不见得都好,它也可以被用得很复杂,比如这个问题 http://segmentfault.com/q/10100000001... 的答案,可以用python这样一句解决,这个lambda函数看起来那的确是挺辛苦的。

from itertools import product
map(lambda p: ''.join(i + j for i, j in zip('abcd', p)) + 'e', product(['.', ''], repeat = 4))
痕至 2022-08-31 10:27:36

基本上lambda适用于一些临时性的,小巧的函数。比如作为一些参数传递给其他函数(类似callback)
比如itertools模块的ifilter函数

def ifilter(predicate, iterable):
    # ifilter(lambda x: x%2, range(10)) --> 1 3 5 7 9
    if predicate is None:
        predicate = bool
    for x in iterable:
        if predicate(x):
            yield x

这里的predicate就可以传递一个lambda函数进去,如果专门为此用一个def来定义函数,显得代码不够简介小巧,而lambda正合此意。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文