from functools import reduce #在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数 lst = [1,2,3,4,5,6,7,8,9,10] result1 = list(filter(lambda x: x%2==0, lst)) #[2, 4, 6, 8, 10] print([x for x in lst if x%2==0])
result2 = list(map(lambda x: 2*x+1, lst)) #[3, 5, 7, 9, 11, 13, 15, 17, 19, 21] print([2*x+1 for x in lst])
result3 = reduce(lambda x,y: x+y, lst) #55 求和 print(result3)
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。
比如上面map的例子,可以写成:
print [x * 2 + 1 for x in lst]
非常的简洁,易懂。
filter的例子可以写成:
print [x for x in lst if x % 2 == 0]
同样也是比lambda的方式更容易理解。
lambda 定义了一个匿名函数
lambda 并不会带来程序运行效率的提高,只会使代码更简洁。
如果可以使用for...in...if来完成的,坚决不用lambda。
如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
总结:lambda 是为了减少单行函数的定义而存在的。
map(function, iterable, ...)会根据提供的函数对指定序列做映射,Python3中返回迭代器,如果要转换为列表,可以使用 list() 来转换
filter(function判断函数, iterable可迭代对象)函数用于过滤序列,过滤掉不符合条件的元素,Python3返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换
reduce() 函数会对参数序列中元素进行累积。
浙公网安备 33010602011771号