【Python】笔记8(高阶函数、map\reduce)

函数式编程,是很抽象的编程范式,纯粹的函数式编程语言编写的函数,没有变量。其输入输出一一对应(无副作用)。反之,有变量,变量状态不确定,一个输入对应多个输出,则是副作用。

函数式编程,函数本身可作为参数传入另一个函数。


①变量可以直接代替函数。如,f=abs(10)是赋具体值,f=abs是函数代替

②函数名也是一个变量。如abs=10,此时abs不再是取绝对值函数,而被具体赋值了。(要恢复函数,要重新导入模块builtins)

高阶函数:这种函数可以接受另一个函数作为参数(还可以把函数作为结果值返回,返回函数)。如

定义函数add中包含abs函数

map(①,②),①处传入的是一个函数,②处传入的是一个可迭代对象。map()的返回值是一个新的迭代器,迭代器,迭代器!

在Python3.6中,教程中的例子的r出来是一个Iterator,但在Python2.7中,r不是一个Iterator,也不需要list(),r本来也就是一个list。

Python2.7显示结果

不可否认得是,map()函数本身可以传入函数,来减少代码编辑量,一行代码完成复杂的程序。


reduce(①,②),①同map()传入的是一个函数,但这个函数必须是接受两个参数的函数,如add(x,y);②传入的是一个序列(应该可以理解为迭代器)。reduce的作用是将序列中的前两个参数得到对应函数的返回值,再将这个返回值结合序列中第三个参数得到对应函数的返回值,两两结合,以此类推,一直到最后一个参数。其结果就是由这个序列函数作用后累加继续函数作用产生的。

reduce和map结合实现char转num:

第一个def,将reduce①的函数定义出来,这里是后面num的运算。第二个def,用dict的key-value,字符串作为key对应查找出数字value(注意dict后面有“[s]”,?),作为map①,将后面的序列都对应地导出值形成一个list。这个list又作为reduce②。

可以将两个def放入同一个def中,这样就可以直接实现str2int()的函数返回。更简洁的,可以使用lambda来直接填充reduce①,如reduce(lambda x,y: x*10+y,②)。

.title(),作用是首字母大写,其他均小写

lower(),作用是全部字母小写

upper(),作用是全部字母大写

.find(),寻找括号内的值,返回索引数

10**2,表示的是10的平方,两个乘号可转义为上尖号

str2float 中一种对小数点的处理:先记下小数的位数(用len(s)和s.find('.'))M用以后面复位,再把这个文本数的小数点去掉(用s=s.replace('.',''),一定要赋值到另一个变量上),然后用reduce和map将文本数转化为数字数,最后将小数点复位(用num=num/(10**M),两个乘号是上尖号)

你可能感兴趣的:(【Python】笔记8(高阶函数、map\reduce))