【Python函数与模块学习记录5】进阶:常用高阶函数
1、什么是filter函数
1.1 lambda函数
Lambda函数是一种内嵌的表达式,创建内嵌的简单匿名函数
- lambda函数又称为lambda表达式,可定义一种无函数名的匿名函数
- 主要用来处理简单的业务逻辑,如加法,取绝对值,过滤等
- 函数体的语句只可以为单行,提高运行效率,不可以跨行定义,不是代码块
- 能接收任何数量的参数,但只能返回一个表达式的值
1.2 filter函数的使用
1)返回一个filter对象,其中包含对其执行函数时结果为真的所有元素
2)filter(func,seq)(方法签名-传递什么样的参数), 接收两个参数,第一个参数是过滤条件,可以是匿名函数或者自定义函数,第二个参数为数据容器(可迭代对象),用来装载要进行过滤的所有数据
3)是过滤器,是python内置的高级函数之一,用来对指定数据过滤
2、什么是map函数
2.1 map(func, seq),将传入的函数依次作用到序列的每个元素,并把结果返回
2.2 当map()函数中传入的列表多于一个时,map()函数可以并行执行
eg:
map(lambda x , y:x*y ,[3,5],[3,5]) 即是[3*3,5*5] ---->[9, 25]
eg:
l1 = map(str, [1,2,3,4])
print(list(l1))
运行结果: ['1', '2', '3', '4']
该程序实现的效果是把列表中的数字1234转换成字符串1234,map()函数中传入的函数是内置函数str(字符串转换),程序在编写及执行时是不会报错的
1、什么是reduce函数
reduce函数:
- 使用指定的函数将元素的前两个元素合二为一,再将结果与第三个元素合二为一,依此类推,直至处理完整个序列并得到一个结果
- reduce(func, seq[,initial])
- 等价于 func(func(func(seq[0],seq[1]),seq[2]),...)
- 接收两个参数,一个是函数名,一个是序列, 按照给定的方法把参数中的序列缩减为单个值,并把结果返回, 返回的并非是reduce类型,而是序列元素类型
- 使用reduce函数需先导入,from functools import reduce
2、filter、map和reduce函数的区别
4.1 map() :参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值。
4.2 filter():用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
4.3 reduce() 函数是对参数序列中元素进行累积,是用传入的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
4.4 map()函数是对每次执行函数后的结果都进行返回,而reduce()最终是得到一个结果。filter()是过滤掉不符合条件的元素,将返回True的元素放到新列表中。三者是有很明显的区别的。