python基础进阶 高阶函数基础

函数式编程--高阶函数

大家好,这里是三岁接下来带来的是传说中的高阶函数,如有不足请大家多多指出

什么是高阶函数。

python支持函数式编程,但是并不是函数式编程

高阶函数需要符合以下条件(两个满足一个即可):

  • 接收一个或多个函数作为参数。
  • 将函数作为返回值返回

特色:

  • 变量可以指向函数
  • 函数名就是指向函数的变量
    (emmm,小编其实也不是很理解这两句话)

让我们看看会介绍到的几个实例:

  • map()
  • reduce()
  • filter()
  • sorted()

map()

map函数:把传入的值依次给前面的函数
使用方法:map(func, *iterables)
func 代表传入的一个函数
*iterables 代表要传入函数的值
结果会做为一个新的迭代器返回
也就是把后面的值映射到前面的函数中去

话不多说,上例子;

print(list(map(lambda x : x ** 2 , range(10))))
结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

emmm 翻译一下
输出一个列表,列表由一个map()构成
map()里面是一个匿名函数和一串值
匿名函数代表一个值的平方

上面的代码等同于:

def square(x):
    x **= 2
    return x

map_list = list( map(square, range(10)) )
print(map_list)
结果
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在这里插入图片描述
图丑勿怪,但是就是这个意思

三岁白话时间:就是把后面列表里面的值逐个给前面的函数返回一个迭代器,可以用列表或循环的方式输出

reduce()

reduce():把后面的值给一个二元操作函数,并将结果与列表中的下一个值继续操作。
比较绕,慢慢来,先康康使用方法
reduce(func, *iterables)
func代表一个二元操作函数
*iterables 代表要操作的集合
返回迭代以后的结果

看操作

from functools import reduce  #导入函数
print(reduce(lambda x,y : x + y , range(1, 101)) )
结合
5050

注意:python3 中reduce()要到functools模块中查找

解析:输出1到100的和

复杂(易懂写法):

from functools import reduce  #导入函数
def addnums(x, y):  #创建函数
    return x+y

print(reduce(addnums,range(1, 101)) )

在这里插入图片描述
不是很清晰,但是差不多这个意识,大家克服理解理解

白话时间:后一个数和前两个的结果反应生成新的结果

filter()

filter():python中内置的用于过滤的函数
使用方法: filter(func, *iterables)
func:判断函数,返回 True 或 False
*iterables:被判断的集合

*iterables会逐个作用于func函数对于返回False的进行删除

返回的结果也是一个迭代器,需要特殊处理后输出

话不多说上例子:

print(list(filter(lambda x : x % 2 == 0,range(1,20))))
结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18]

输出1到19里面的所有的偶数

def even_number(data):
    return data % 2 == 0

print(list(filter(even_number,range(1,20))))
结果:
[2, 4, 6, 8, 10, 12, 14, 16, 18]

两个函数相同,一个用了匿名函数一个用自定义函数

输出1到19里面的所有的奇数

print(list(filter(lambda x : x % 2 == 1,range(1,20))))
结果:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

sorted()

sorted():快速排序函数,可以对所有的可迭代对象进行排序,实质上是两个元素之间的比较
使用方法:sorted(*iterables, key = None, reverse=False)
*iterables可迭代对象(要排序的集合)
key 指点函数(排序方式)
reverse 排序规则 True表示降序,False表示升序

返回一个新的lsit(列表)而不是在原有列表上进行修改

list = [3, 6, 2, 8, 7,4]
print(sorted(list))
结果
[2, 3, 4, 6, 7, 8]

因为key = None, reverse=False 有默认值所以可以直接进行排序

list = [3, 6, 2, 8, 7,4]
print(sorted(list, reverse=True))
结果
[8, 7, 6, 4, 3, 2]

通过关键字修改参数后变成了降序排列

emmm,并没有调用函数怎么能够说是高等函数呢?
这个函数不高等! 不急,安排!!!

list01 = [6, -5, 9, -3,-8]
print(sorted(list01))
结果
[-8, -5, -3, 6, 9]

#使用绝对值进行排序
list01 = [6, -5, 9, -3,-8]
print(sorted(list01, key= abs))
结果
[-3, -5, 6, -8, 9]

使用了abs() 以后就是对列表中的数值的绝对值进行排序

其他的使用方式进行类推即可

今天的高等函数就到这里啦,这里是三岁,白话带你学编程。
记得点赞评论加收藏呦!!!

猜你喜欢

转载自blog.csdn.net/weixin_45623093/article/details/105904511