目录
1、高阶函数定义
2、常用的高阶函数
2.1、常用高阶函数——map
2.1.1、map小练习
2.2、常用高阶函数——filter
2.3、常用高阶函数——sorted排序
2.3.1、sorted排序小练习
2.4、常用高阶函数——reduce
1、高阶函数定义
定义:把函数作为参数传入,这样的函数称为高阶函数
2、常用的高阶函数
2.1、常用高阶函数——map
- 内置函数map,map()函数接收两个参数,一个是函数,一个是Iterable(可多个)
-
map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
- 内置函数map,map()函数接收两个参数,一个是函数,一个是Iterable(可多个)
- map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
# 求取列表中的每个元素的平方值
lst = [1, 2, 3, 4, 5]
lst2 = [3, 6, 7]
def func(item):
return item * item
# 一个一个映射成我们想要的元素输出
result = map(func, lst)
print(list(result))
result = map(lambda x: x ** 2, lst)
print(list(result))
#注意短板效应:都是以最短的数作为标准来运算
print(list(map(lambda x,y:x+y,lst,lst2)))
# 执行结果:[4, 8, 10]
2.1.1、map小练习
- 有列表[1,2,3,4,5],将所有元素转换成str:['1','2','3','4','5']
print(list(map(str,[1, 2, 3, 4, 5])))
- 有列表字符串'span',将各字符转换成对应的ascii码的列表[115, 112, 97, 109]
print(list(map(ord,"span")))
- 有列表[-1,-2,0,1,2],将各元素转换成绝对值[1, 2, 0, 1, 2]
print(list(map(abs,[-1, -2, 0, 1, 2])))
- 将列表中的数变成百分位并且取两位小数
a = [0.346574, 3.1264,15.2165,0.2165]
print(list(map(lambda x:f"{round(x*100,2)}%",a)))
print(list(map(lambda x:"%.2f%%"% (x*100),a)))
2.2、常用高阶函数——filter
filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该
元素。注意到filter()函数返回的是一个Iterator,也就是一个惰性序列。
作用:用于过滤
- 取出10以内的奇数
result = filter(lambda x:x %2,range(10)) print(list(result)) #### 执行结果 [1, 3, 5, 7, 9]
- 1-200以内开平方是整数的数
import math print(list(filter(lambda x: math.sqrt(x) % 1 == 0, range(1, 201)))) #### 执行结果 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]
- 过滤出100-999以内的水仙花数
def func1(item):
return item == ((item % 10) ** 3 + (item //10%10) ** 3 + (item // 100) ** 3)
print(list(filter(func1, range(100, 1000))))
##### 执行结果
[153, 370, 371, 407]
- 把一个序列中的空字符串删除,['A', '', 'B', None, 'C', ' ', 'a', 1, 0]
lst = ['A', '', 'B', None, 'C', ' ', 'a', 1, 0] print(list(filter(lambda x:x is not None and str(x).strip(),lst))) ### 执行结果 ['A', 'B', 'C', 'a', 1, 0]
2.3、常用高阶函数——sorted排序
lst = [-6, 3, 2, -9, 7]
print(sorted(lst, key=abs))
lst2 = [True, len(lst)>2, 0, 2]
###### 执行结果
# 按照绝对值排序,按照函数的返回值来排序
[2, 3, -6, 7, -9]
# 在在底层布尔类型都是0和1。注意字符串类型,不能够进行排序
[0, True, True, 2]
lst = [(True, False, True),
(2, 1, 4),
(4, 23, 1),
(False, True, 2),
(False, False, 9)]
print(sorted(lst))
###### 执行结果
# 按照每一个元素(容器类型)的第一个元素进行排序。若是第一个的值一样,那么就按照第二个排序,以此类推
[(False, False, 9), (False, True, 2), (True, False, True), (2, 1, 4), (4, 23, 1)]
2.3.1、sorted排序小练习
1、列表中的值忽略大小写
lst = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(lst,key=str.lower))
#### 执行结果
['about', 'bob', 'Credit', 'Zoo']
2、d1 = {"a":3,"b":2,"c":4,"d":1} value值来排序
d1 = {"a":3,"b":2,"c":4,"d":1}
# 下面中方法都可行
print(sorted(d1,key=lambda x:d1[x]))
print(dict(sorted(d1.items(),key=lambda x:x[1])))
#### 执行结果
['d', 'b', 'a', 'c']
{'d': 1, 'b': 2, 'a': 3, 'c': 4}
2.4、常用高阶函数——reduce
1、列表中的值忽略大小写
lst = ['bob', 'about', 'Zoo', 'Credit']
print(sorted(lst,key=str.lower))
#### 执行结果
['about', 'bob', 'Credit', 'Zoo']
2、d1 = {"a":3,"b":2,"c":4,"d":1} value值来排序
d1 = {"a":3,"b":2,"c":4,"d":1}
# 下面中方法都可行
print(sorted(d1,key=lambda x:d1[x]))
print(dict(sorted(d1.items(),key=lambda x:x[1])))
#### 执行结果
['d', 'b', 'a', 'c']
{'d': 1, 'b': 2, 'a': 3, 'c': 4}
2.4、常用高阶函数——reduce
作用:reduce数组是用来迭代一个数组,并且把它累积到一个值中。使用reduce方法时,要传入一个回调函数,这个回调函数的参数是一个累加器(比如例子中的previousVal)和当前值(currentVal)。
from functools import reduce
a = [1, 2, 3, 4]
def func1(x, y):
return x * 10 + y
print(reduce(func1, a))
# 前面得到的结果,变成下一个参数继续传入。
# 1*10+2=12 ==》12*10 +3=123 ==》123*10+4==1234
##### 执行结果
1234


![[python]十七、高阶函数 [python]十七、高阶函数](http://www.mshxw.com/aiimages/31/1012111.png)
