lambda x:x+1 第一个x表示形参,第二个表示函数执行的运算
自定义map函数的实现
>>> def map(func,nums):
ret = []
for i in nums:
res = func(i)
ret.append(res)
return ret
>>> map(lambda(x:x+2),[1,3,5,7,9])
SyntaxError: invalid syntax
>>> map(lambda x:x+2,[1,2,3,4,5])
[3, 4, 5, 6, 7]
>>>
内置函数map返回的是一个可迭代对象(迭代器) 函数式编程中的
>>> list(map(lambda x:x.upper(),name))
['D', 'S', 'A', 'K', 'J', 'D', 'A', 'S', 'K', 'D', 'H', 'K', 'A']
>>>
在python2中map处理的结果就是一个
filter函数与map函数的逻辑类似,就是在匿名函数处理时有差异,filter函数的第一个参数是匿名函数返回值是一个布尔类型的值,第二个参数是可迭代的对象,举列filter函数实现的过程。
array =['liudapang','wangjialin','liufeng','wangkeqin']
def filter_test(func,array):
ret = []
for i in array:
if func(i):
ret.append(i)
return ret
print(list(filter_test(lambda x:x.startswith("liu"),array)))
['liudapang', 'liufeng']
在python3中reduce函数集成在functools模块中,在使用前需要先导入,from functools import reduce
reduce函数是将序列中所有数/文字通过运算合并为一个值,得出最终的结果,先自定义出reduce测试函数,reduce_test
比方说这里有一个列表,需要把其中所有的值相乘,则可以使用reduce函数
def reduce_test(func,nums,init=None):
if init==None:
ret = nums.pop(0)
else:
ret = init
for i in nums:
ret = func(ret,i)
return ret
res = reduce_test(lambda x,y:x*y,nums)
print(res)
输出结果:120
在python内置的reduce用法:
>>> from functools import reduce
>>> nums = [1,2,3,100]
>>> res = reduce(lambda x,y:x*y,nums,10)
>>> print(res)
...
6000
#第三个值为初始值,默认为None,通过赋值可以参与整体运算
小结:
#map()函数处理序列中的每个元素,得到的结果是一个迭代器,该迭代器的元素个数和位置与传入的列表相同
#filter函数遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来,返回的结果也是一个迭代器
#reduce函数是处理一个序列,然后把序列进行合并操作