高阶函数
- def:函数的参数或函数的返回值是函数的函数
def handle(func, *param):
return func(*param)
def my_sum(*param):
sum = 0
for i in param:
sum += i
return sum
print(handle(my_sum, 1, 2, 3, 4, 5))
系统中自带的高阶函数
- map(func,interable)
该函数会把iterable中的数据依次传递给func函数处理,最后把处理的结果返回
需求:将列表[1,2,3,4,5]中的每个元素平方
def power(n):
return n ** 2
res = map(power, [1, 2, 3, 4, 5])
print(list(res))
res = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
#ps:此处res是一个迭代器,内部相当于一个指针,使用一次指针往后移一次,所以遍历后print(list(res))为空
- reduce(func, iteralbe)
需要 from functools import reduce 。累积操作,func函数必须接收两个参数,reduce会把运行结果当作一个参数,然后从iterable再取出一个数据当作另一个参数
工作原理:最开始把列表中的1和2当作参数传入,然后将1*2的结果当作参数1,列表中的3当作参数2,依次迭代
from functools import reduce
mylist = [1, 2, 3, 4, 5]
res = reduce(lambda x, y: x * y, mylist)
print(res)
** filter(func,iteralbe)**
过滤器,根据func来过滤iterable,将iterable中的数据传入函数,如果函数返回True,就保留该数据,否则就不保留,即func的返回值为bool类型
list_one = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = list(filter(lambda x: x % 2 == 1, list_one))
print(res)
sorted(iterable,key=None,reverse=False)
对数据进行排序,key用指定排序的规则,值是一个函数,reverse用来指定是否降序
list_two = [1,3,234,-34,1,24,-234,3,3,6,]
#res = list_two.sort() #就地排序,会对原数据进行更改
# print(res)
new_list = sorted(list_two,key=abs) #按绝对值大小进行排序。如果是list自带的sort方法会影响原始数据,系统级的函数不会影响原始数据
print(new_list)
print(list_two)