函数式编程(map、filter、reduce)
问题:选出一列表[-1000,1000]中同时是3和5倍数的元素,并对这些元素进行以下运算:x2/(x+5)(1/2),输出该结果中最大的那个数的数值
代码如下:
times=lambda x : x%3 == 0 and x%5 == 0
my_times=filter(times,range(-1000,1000))
f=lambda my_times:my_times**2/(my_times+5)**(1/2)
squ=map(f,my_times)
reduce(max,squ)
Out: 980100
解析:
- filter:输出满足条件的元素列表
- map:将列表中元素分别按照f函数进行运算,并输出新的列表
- redece(f,list):将列表中元素依次两两按照f运算,并输出最终结果
编程过程中的问题: - lambda中如果有if一定要写else,或者两者都不写,函数式编程里没有return
- lambda下跟map时,取的是lambda的返回值,而filter只关注条件,返回值无用。
网友评论