一、map 方法(函数)
map():用于对某个自定义函数进行多次遍历的方法,或可以说是将某一实参序列按顺序逐项传递给某自定义函数(可改变运算结果),最后将函数运算结果制作成一个map object迭代器,并将迭代器返回。
例如:
str = ['a','b','c','d']
def fun1(s):
return s + "alvin"
ret = map(fun1, str) #将序列str逐项传入fun1函数
print(ret) # map object的迭代器
print(list(ret)) # ret是一个迭代器对象
输出:
<map object at 0x000001E899564250> #返回的该map类型迭代器的地址
['aalvin', 'balvin', 'calvin', 'dalvin']
二、filter 方法(函数)
filter():用于对某个自定义函数进行多次遍历的方法,或可以说是将某一实参序列按顺序逐项传递给某自定义函数(不可改变运算结果),最后将函数运算结果制作成一个filter object迭代器,并将迭代器返回。
例如:
str = ['a', 'b', 'c', 'd']
def fun1(s): #过滤器方法
if s != 'a':
return s
ret = filter(fun1, str)
print(ret)
print(list(ret))
输出:
<filter object at 0x0000024F61C94250> #返回的该filter类型迭代器的地址
['b', 'c', 'd']
不可改变运算结果,例如:
同上述map()函数代码:
str = ['a', 'b', 'c', 'd']
def fun1(s):
return s + "alvin"
ret = filter(fun1, str)
print(ret) # map object的迭代器
print(list(ret))
#与map()对比:
#str = ['a', 'b', 'c', 'd']
#def fun1(s):
# return s + "alvin"
#ret = map(fun1, str) #将序列str逐项传入fun1函数
#print(ret) # map object的迭代器
#print(list(ret)) # ret是一个迭代器对象
输出:
<filter object at 0x0000024C36A64250>
['a', 'b', 'c', 'd']
#与map()对比:
#<map object at 0x000001E899564250>
#['aalvin', 'balvin', 'calvin', 'dalvin']
三、reduce 方法(函数)
reduce():用于对某个自定义函数进行多次遍历的方法,或可以说是将某一实参序列按顺序逐项传递给某自定义函数,并返回一个值。不同点见下方代码。
例如:
from functools import reduce
def add1(x, y):
return x+y
print(reduce(add1, range(1, 10))) #1加到10
print(reduce(add1, [1,2,3,4,5,6,7,8,9]))
#解释range()在reduce方法中的调用形式
#此时reduce只有两个参数,每次将调用第二个参数(序列)的前两个元素传入add1中进行运算,将运算结果返回,运算结果将与下一元素一同传入add1再进行运算,以此类推直到第二参数(序列)末尾。
print(reduce(add1, range(1, 10),10))
输出:
45
55
四、lambda 方法(函数)
lambda():又称匿名函数,本身作用一般,需要与上述三种方法配合使用。
例如:
add = lambda a,b : a+b
# lambda a,b : a+b
# a,b为参数,冒号后为代码块
print add(2,3)
利用lambda()方法与reduce()方法结合计算阶乘:
from functools import reduce
print (reduce(lambda x,y: x*y, range(1,6))) #计算5的阶乘
输出:
120
提醒
合理结合使用四种函数,可在必要之时,减少大量代码的编写