首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python常用高阶函数(文末粉丝红包)

Python常用高阶函数(文末粉丝红包)

作者头像
吾非同
发布2020-11-04 15:36:38
4150
发布2020-11-04 15:36:38
举报
文章被收录于专栏:吾非同吾非同吾非同

高阶函数的定义:接收函数作为参数,或者将函数作为返回值的函数。函数式编程就是指这种高度抽象的编程范式。

高阶函数的抽象能力是非常强大的,合理的使用高阶函数,可以简化代码,提升可读性。

例如使用高阶函数求两个数的绝对值之和:

# f是第三个参数,用来接收将来传入的函数
def sum_num(a, b, f):
    return f(a) + f(b)
    
result1 = sum_num(-5, 1, abs)
print(result1)
# 输出:6

常见的高阶函数有:filter()、map()、reduce()、sorted(),下面看一下它们的基本用法吧。

filter

filter( 函数名, 可迭代对象 )    

作用:过滤序列中不符合条件的元素。

filter有两个参数,第1参数可以是函数,也可以是None.

当第1个参数是函数的时候,将第2个参数中每个元素进行计算。

当第1个参数是None时,直接将第二个参数中为True的值筛选出来。

返回的是内存地址,需要用list()转换。

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 得到列表中的偶数
def func(x):
    return x % 2 == 0


result = filter(func, lst)
print(list(result))

# 输出:
[2, 4, 6, 8, 10]

使用匿名函数

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(filter(lambda x: x % 2 == 0, lst)))

map

map( 函数名,迭代对象 )

作用:对可迭代对象的每一个元素作为函数的参数进行运算,然后将其添加到一个新的对象中返回。

返回的是内存地址,需要用list()转换。

# 对可迭代对象进行2次方运算
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = map(lambda i: i ** 2, lst)
print(list(result))
#输出
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

reduce

reduce( 函数名(x,y) , 可迭代对象 )

作用:reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

每次函数计算的结果继续和序列的下一个元素做累积计算。

使用前,必需导入functools模块。

# 求列表元素之和
import functools

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def func(a, b):
    return a + b


result = functools.reduce(func, lst)
print(result)
输出:
55

使用匿名函数

import functools

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(functools.reduce(lambda x, y: x + y, lst))

sorted()

sorted(iterable,key,reverse)

其中,iterable是可迭代对象。

key可选参数,可以接收函数来实现自定义的排序,默认为None(直接比较)。

reverse:排序规则,为一个布尔值,reverse = True 降序 , reverse = False 升序(默认)。

# 默认情况下,对字符串排序,是按照ASCII的大小比较的
lst = ['bb', 'aaaa', 'c', 'ddddddddd', 'fff']
print(sorted(lst))
输出:
['aaaa', 'bb', 'c', 'ddddddddd', 'fff']
#对列表按照int值排序
lst = [2, 5, '1', 3, '6', '4']
print(sorted(lst, key=int))
输出:
['1', 2, 3, '4', 5, '6']

“还记得sort()与sorted的区别吗

  • sort() 函数只适用于列表排序,而sorted()函数适用于任意可以迭代的对象排序。
  • sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用sort() 节省内存空间,提高效率。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吾非同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • filter
  • map
  • reduce
  • sorted()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档