python的lambda函数出现小数结果_Python lambda函数最适合出现在什么情况下

本文介绍了Python中的lambda函数与def定义的函数的区别。lambda函数用于创建小型匿名函数,通常在函数式编程中用于简洁地传递判断条件或应用于map、reduce等函数。虽然lambda函数不可多次调用且可能降低代码可读性,但在简化代码和提高效率方面有一定优势。例如,在过滤列表元素或映射操作中,lambda函数可以提供简洁的解决方案。然而,过度使用复杂的lambda可能导致代码难以理解。博客推荐了解并适当地使用lambda函数,以提升Python代码的简洁性和效率。

被Python的匿名函数lambda搞得一头雾水。

一直都是用def来创建函数的,最近又看到很多lambda来申明函数的,不知道这二者的用途有什么区别。

def创建的函数是可以多次调用的,而lambda却不可以,那么,为什么有时候要使用lambda呢?

他创建的函数而且很难读懂耶。。。

基本上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正合此意。

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))

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd20443.html

相关文章 Recommend

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值