什么是lambda
lambda
定义匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁, 为了减少单行函数的定义而存在的。
lambda
的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果是初学Python的人也许会对此比较难理解。
如果可以使用for...in...if
来完成的,坚决不要用lambda,因为如果你的代码包含循环,如果有,宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
如果你就是喜欢用lambda
来做,那也无可厚非,但是有内置函数减弱了代码的可读性!
好了介绍完成了lambda
,那就让我们来实际用一下,实例如下:
与其他函数的结合
下面我们再来看看小米加上步枪的结合使用。
1. reduce lambda
什么是reduce
:
Python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(列表,元组等)中的所有数据进行如下操作:
传给reduce中的函数func() (必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
关于Python reduce的详细解析,后续详细介绍,下面我们介绍一下reduce lambda
的应用案例:
#!/usr/local/bin/python3
# Author: nock
"""
首先在Python3版本中,直接使用reduce()的话,系统会报错,提示不存在reduce()函数, 在Python3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里, Python2可以直接import
"""
from functools import reduce
num_list = [1, 2, 3, 4, 5]
result = reduce(lambda x,y: x y, num_list)
print(result)
这种方式用lambda表示来当做参数,因为没有提供reduce的第三个参数,所以
第一次
执行时x=1, y=2
,第二次
则x=1 2, y=3
即列表的第三个元素。
等同于:
代码语言:javascript复制#!/usr/local/bin/python3
# Author: nock
from functools import reduce
num_list = [1, 2, 3, 4, 5]
result = reduce(lambda x,y: x y, num_list, 0)
print(result)
# result等于 15
这种方式没用lambda当做参数,因为指定了reduce的第三个参数为0,所以的第一次执行时
x=1, y=2
, 第二次则x=1 2, y=3
, 即列表的第三个元素。 假设指定reduce的第三个参数为100,那么第一次执行x=100
,y
依然是遍历列表中的元素,最后结果就是115。
执行过程视图:
2. map lambda
什么是map
:
map函数应用于每一个可迭代的项,返回的结果是一个list
。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
语法: map(func, seq1[, seq2...] )
Python函数式编程中的map()
函数是将func作用于seq中的每一个元素,并用一个列表给出返回值。如果func为None,作用同zip()。
#!/usr/local/bin/python3
# Author: nock
num_list = [1, 2, 3]
new_list = list(map(lambda i: i 1, num_list))
print(new_list)
# result: [2, 3, 4]
如上,使用map函数将会对列表中的所有元素操作; map中有2个参数(函数, 列表), 它会在内部遍历列表中的每一个元素,执行传递过来的函数参数,然后输出到新的列表中。
执行过程视图:
map
同时也可以实现多个列表相加:
#!/usr/local/bin/python3
# Author: nock
list_one = [1, 2, 3]
list_two = [4, 5, 6]
new_list = list(map(lambda x,y: x y, list_one, list_two))
print(new_list)
# result: [5, 7, 9]
说明:
这里需要注意的是: 使用Python3的时候,map函数有一个变化那就是,如果不在map前加上list,lambda函数根本就不会执行。
在Python2中,map会直接返回结果:
而在Python3下面,返回的就是一个map对象
:
<map object at 0x7f381112ad50>
所以,Python3环境下,如果要得到结果,必须用list作用于这个map对象。
3. filter map
什么是filter
:
filter()
函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
和map()
类似,filter()
也接收一个函数和一个序列, 和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
语法: filter(function or None, sequence)
, 简单示例如下:
#!/usr/local/bin/python3
# Author: nock
num_list = [100, 20, 24, 50, 110]
new_list = list(filter(lambda x: x < 50, num_list))
print(new_list)
# result: [20, 24]
filter
跟map一样,在Python3的环境下,必须加list转换类型,默认返回的是一个对象。
执行过程视图:
到这里Python小米加步枪几个函数结合使用简单介绍到这里就结束了,有什么不对的地方,可以留言交流并指正。