您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

(十二)Python高阶函数与匿名函数

2022/1/9 1:41:18发布67次查看
转载自百家号作者:郭靖愕然
在计算机编程语言中,高阶函数指的是接受函数作为输入或输出的函数。python中内置了几个常用的高阶函数,比如map( )函数、reduce( )函数、filter( )函数和sorted( )函数。本文将注意介绍这些函数的使用,并介绍匿名函数lambda表达式在高阶函数中的使用。
map( )函数与reduce( )函数
这两个函数构造上差不多,都传入两个参数,第一个参数是函数,第二个参数是列表。当然两者不同的地方更多,从函数名单词的意思来看:map意为映射,是将已有列表的元素通过函数映射到一个map类型的迭代器对象中,迭代器对象中的元素与已有列表的元素是一一对应的;ruduce意为推导,是将列表中的元素依次代入函数进行迭代运算,返回的结果是一个计算后的数据,因此它传入的函数必须带两个参数。
图1 map( )函数上图是一个map( )函数的简单示例,作用是将列表中的元素转换成大写。第6行的map( )函数,将字符串str1(字符串可以当成列表)的每个字符依次通过函数f1( )进行映射,由第7行的运行结果可知返回的结果str2并不是列表,而是一个map类型的对象,由第8行的结果可知str2也是迭代器对象,迭代器对象是惰性的,无法直接打印所有对象,可以用for ... in循环打印或next( )遍历,也可以通过list( )函数转成列表。
图2 reduce( )函数上图是reduce( )函数的简单示例,可用来计算列表中所有元素的乘积。实际上第5行reduce(f2, range(1, 6))的计算逻辑与第9行完全一样,明显使用reduce( )函数写起来更简便,读起来也更容易理解。
lambda函数
如果使用lambda(匿名)函数,map( )函数和reduce( )函数还能进一步简化。lambda函数能实现普通一样的功能,能传入参数,也能返回运算结果;不同的是lambda函数没有函数名,通常只有一行的表达式,函数的复杂程度也有限。
图3 lambda函数上图代码的第4行和第7行使用了lambda函数,它的结构很简单,lambda为关键字,冒号左边是参数,冒号右边是返回结果。当函数逻辑比较简单,且不需要在其他地方重复时可以考虑使用lambda函数,会大大减少代码量,避免函数重名带来的麻烦,并使代码结构更加清晰。
filter( )函数
filter( )函数顾名思义是用来对数据进行过滤的,filter( )函数在结构上与map( )和reduce( )类似,也是传入两个参数,一个是函数,一个列表。区别在于:filter( )的参数函数的是布尔值,列表中的元素依次传入函数进行计算,结果为true则将该元素加入返回数据中,为false则过滤掉。下面用filter()函数获取1到20之间所有的奇数。
图4 filter( )函数第2行在filter( )函数中使用lambda函数对列表进行过滤,能被2整除的都过滤掉了;
第4行和第5行对filter( )函数的返回数据类型进行判断,显然返回数据是一个filter类型的迭代器对象;
sorted( )函数
sorted( )函数是用来对可迭代对象排序的,与列表的list( )函数不同,后者是在原位置上进行排序的,排序后原列表的元素顺序会发生改变,而前者是将排序后的结构生成到一个新的列表中。下面的代码是sorted( )的几种使用方法。
图5 sorted( )函数数据分析中大量的工作都是使用高阶函数与搭配匿名函数进行的,希望读者不要只求能看懂,要多亲自动手编写,以加深对这些函数的理解。按照惯例,本文所有代码已上传至网盘,请查看评论获取链接及密码。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product