python高阶函数

该篇中主要介绍什么是高阶函数,高阶函数的用法以及几个常见的内置的高阶函数。

什么是高阶函数?
高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

高阶函数 map、filter、reduce、sorted

  • map
    map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def fn(x):
    return x*x

r=map(fn,[1,2,3,4,5,6,7,8])
print(list(r))

结果: [1, 4, 9, 16, 25, 36, 49, 64]
  • reduce
    reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
#把序列[1, 3, 5, 7, 9]变换成整数13579
from functools import reduce
def fn(x, y):
    return x*10+y
print(reduce(fn, [1, 3, 5, 7, 9]))
结果:13579
  • filter
    和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
# 把一个序列中的空字符串删掉,可以这么写
def not_empty(s):
    return s and s.strip()
arr=list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
print(arr)
结果:['A', 'B', 'C']

注:
1.用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。
2.注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

  • sorted
    排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

Python内置的sorted()函数就可以对list进行排,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

#默认正序reverse=False ,reverse=True 反向排序
a = sorted([36, 5, -12, 9, -21], key=abs,reverse=False)
print(a)
结果:[5, 9, -12, -21, 36]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值