ay17:
1.高阶函数:
特点:函数的形参位置必须接受一个函数对象
分类学习:
1).map(fn,lsd1,[lsd2...]):
参数一:fn --> 函数对象
参数二:lsd1 --> 序列对象(字符串、列表、range...)
功能:
将fn函数作用于lsd1中的每一个元素上,
将每次执行的结果存入到一个map对象中返回;
【注意】得到的这个map对象是一个迭代器对象
需求:lt = ['1','2','3','4','5'] --> [1,2,3,4,5]
map(int,lt):执行过程如下:
1).lt --> 取出第一个元素:'1'当做实际参数传递给int函数的形参位置 --> int('1')
将转换以后的结果:1保留到map对象的第一个元素位置
2).lt --> 取出第二个元素:'2'当做实际参数传递给int函数的形参位置 --> int('2')
将转换以后的结果:2保留到map对象的第二个元素位置
以此类推...
直到map函数执行完了,整个map对象才真正成型了...
2).reduce(fn,lsd):
参数一:fn --> 函数对象
参数二:lsd --> 序列对象
功能:
先将lsd中的第一和第二个元素去除传入到fn中参与运算,
运算后得到结果,再和第三个元素传入到fn中参与运算,
以此类推...
【注意】:
reduce函数属于functools模块中的函数,所以需要显示的先导入functools模块再使用
from functools import reduce
3).filter(fn,lsd):
filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)
解释:
filter的意思:在计算机领域中我们都称为过滤器
格式:
filter(fn,lsd):
参数和map、reduce一样理解
功能:
将lsd中的每一个元素都给到fn函数
如果fn函数的返回值为True,那么就保留这个元素到filter对象中
如果fn函数的返回值为False,那么就舍弃这个元素,不会保留到filter对象中
最终filter函数执行完毕了,返回给程序一个filter对象(迭代器对象)
补充:
sorted()函数的使用:
我们将sorted和sort进行一番比较:
相同点:
它们都是来实现排序的操作(功能层面)
不同点:
列表中的sort函数,它执行完毕后会直接影响原本这个list的内部结构(内部的数据发生改变了);
而内置函数sorted函数,它执行完毕后不会影响原本容器中的内部结构,而会返回一个新的列表给程序;
回顾排序:
选择排序,冒泡排序它们的性能都很低下;
意味着开发不会用,但是面试喜欢面(一般开发不用的,面试都喜欢面)