内置函数map, reduce, filter 的使用方法类似,均为:第一个输入参数是函数,第二参数时sequence。
map
对sequence的item 依次执行 函数。此处的函数可以是函数,自定义函数,匿名函数lambda。
- 基本使用方法: map(function, sequence)
- 使用中需要注意的是,在python2.7中,执行上述代码便可以直接显示结果,但在python3下,返回的结果需要重置类型,比如list,才能打印输出。
1 """依次执行""" 2 # map(str, range(5)) python 2.7下,这样就能直接显示结果,但在python 3下,这样显示不出结果也不能调用。 3 # 需要:list一下 4 ls = map(str, range(5)) 5 rs = list(ls) 6 print(rs) 7 # 匿名函数 8 rs1 = list(map(lambda x: x+1, range(5))) 9 print(rs1) 10 # 自定义函数 11 def func(x): 12 return x**2 13 rs2 = list(map(func, range(8))) 14 print(rs2) 15 16 # 对于多参数,可以使用多参数的函数 17 def func1(x,y): 18 return x+y 19 rs3 = list(map(func1,"fabi","dais")) 20 print(rs3)
执行上述代码,例如第四行,map的作用就是使range(5)的数依次执行 str 的方法,返回的结果自然是["0","1","2","3","4"]。
整理一些遇到的map使用:
1 self.colors = list( 2 map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)), 3 self.colors))
1 self.colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))
reduce
对sequence的item 迭代执行 函数。
- 基本使用方法:reduce(function,sequence)
- 使用中需要注意的是,在python3中,reduce已经从内置函数中移除,放置在functools模块中。
- 如果输入三个参数,则第三个参数为初始参数,也就是说,会在迭代过程中多一次第三个参数的运算。
- 可以直接生成返回值。
1 """迭代执行""" 2 from functools import reduce 3 print(reduce(func1, range(10))) # 做的是一个连加的运算 4 5 print(reduce(lambda x,y:x*y, [1,2,3],2)) # 如果是三个参数,可以在原来运算的基础上,多一个第三个参数的运算
filter
对sequence的item 依次执行 函数,返回为True( != 0)的item组合。
- 基本使用方法: filter(function, sequence)
- 和map一样,返回的结果需要重置类型。
1 def func2(x): 2 return x%2 3 print(set(filter(func2, range(4))))
返回值为{1,3}。