洗礼灵魂,修炼python(25)--自定义函数(6)—从匿名函数进阶话题讲解中解析“函数式编程”
匿名函数进阶
前一章已经说了匿名函数,匿名函数还可以和其他内置函数结合使用
1.map
map():映射器,映射
list(map(lambda x:x*2,range(10))) #把range产生的数字映射进lambda函数里进行计算
结果:
注意:mapmap(function, sequence[, sequence, ...])接受的参数,第一个是函数,第二个,第三个可选参数也是序列
当第一个参数不为函数时:
因为把函数放进去,即代表要进行运算处理,设置为None即表示不做计算
说到这,说一下reduce()函数
2.reduce
reduce(function, sequence[, initial])看这个参数就知道和map函数很类似对吧?
看例:
有没有发现什么?是的,此时它就是用来计算总数的
还有,reduce的第三个参数是一个基数,用来设置起始值的:
而这些所有计算最关键的都在于传入的函数f,它是设定怎么计算的,比如我要让计算做平方:
报错了,提示的是reduce必须给两个参数,我确实给了两个参数,但是还是报错啊?
再结合前面的例子,其实说的是reduce接受的函数必须接受两个参数,并不是指的reduce自身接受两个参数,所以,在使用reduce的时候,必须事先考虑好怎么计算,并不是什么都可以计算的
reduce可以用来操作阶乘:
比如5的阶乘:
那么既然都说到这了,顺便说说filter函数
3.filter函数
filter(function or None, sequence):过滤器,筛选为真的参数
例:
再看:
python2下:
python3下:
所以,python2和python3下使用filter是不同的,记住就行
同样,filter函数也可以结合lambda匿名函数来计算:
是不是方便很多?这就是匿名函数的好处
那么以上的几个函数,其实就是函数式编程的体现(你以为我会真的只是简单对匿名函数的补充?哈哈,这只是套路需要/滑稽)
函数式编程
1.什么是函数式编程?
又称泛函编程,是一种编程范型。它将计算机运算视为数学上的函数计算,并且避免可变状态以及可变数据
2.哪些是函数式编程:
函数式编程语言最重要的基础就是lambda演算,而且lambda演算的函数可以接受函数当作输入和输出
3.支持函数式编程的语言挺多的,但python支持的函数式编程有限:
1):map(function, sequence[, sequence, ...]):
将函数func作用于给定序列的每个元素,并用一个列表来提供返回值,如果func为None,则直接将后面的参数中序列中的每个元素依次组成一个新的列表,如果元素数量不对应,直接以None代替
2):reduce(function, sequence[, initial]):
将二元函数(两个参数)作用于seq序列的元素,每次携带一对(之前的结果以及下一个序列元素),依次将现有的结果和下一个值按照二元函数的计算规则计算,最后得到一个值返回,如果初始值iniial给定,则以这个初始值作为基数和序列中的第一个元素计算,得到结果再与下一个序列元素计算,依次类推得到一个值返回
3):filter(function or None, sequence):
调用一个会返回布尔值的func来遍历每个seq中的元素,返回一个使func返回值为True的元素组成的序列
4.函数式编程有如下好处:
1):代码更简洁,符合python宗旨
2):数据集操作,输入和输出都可以一起
3):没有循环体,减少临时变量,逻辑变得简洁
4):代码变成了在描述你要干什么,而不是怎么去干。