python 中 高阶函数

什么是高阶函数?
对于c/c++来说,我们的函数参数不能是函数,所以他们的参数不能称为高阶函数。所以,在python中(当然,一些其他的高级语言也是支持的),参数能够是函数的函数,我们称这种函数为高阶函数。
示例code:

def high_order_function(x, y, abs):
    return abs(x) + abs(y)

# 我们可以看到,这个函数的最后一个参数为内建的abs函数。
# 所以我们可以称 high_order_function() 为高阶函数

今天主要分析,python中的map,reduce,filter,sorted,这四个标准的高阶函数。

map:


map函数,传入两个参数,一个函数,一个序列(或者说是迭代)。作用是把函数作用于序列上的每一个元素。

L = [-1, 2, 3, -7, 10, -9]
def abs_list(L):
    return map(abs, L)
print (list(abs_list(L)))
# 输出: [1, 2, 3, 7, 10, 9]
# list() 函数把整个序列都计算出来,返回一个list。

reduce:


reduce函数,必须传入两个参数,一个函数,一个序列。作用是把函数作用于前两个元素的结果和第三个元素再次调用函数。

# 求积
from functools import reduce
L = [1, 2, 3, 4, -1]
def prodect(L):
    return reduce(lambda x, y: x * y, L)
print (prodect(L))
# 输出: -24
# 由于我们的 reduce 函数在 functools 模块中,所以我们需要import

filter:


filter函数,必须传入连个参数,一个返回布尔类型的函数,一个序列。作用是用来筛选 函数返回true 的元素,即去掉返回false的元素。

# 筛选偶数
L = [1, 2, 3, 4, 5, 0, 9]
def is_even(x):
    return x % 2 == 0
print (list(filter(is_even, L))
# 输出为[2, 4, 0]

sorted:


sorted函数,是一个普通的排序函数。当然,他的不普通在与其中的一个选项参数 key 可以指向一个函数,从而成为高阶函数。 还有一个 reverse 参数,用来指定排序是顺序还是逆序。

# 绝对值排序
L = [1, -3, 0, 2, -9]
L = sorted(L, key = abs)
print (L)
# 输出: [0, 1, 2, -3, -9]

一开始我是这么认为的:
key很c/c++中sort函数中的cmp函数,很是类似。但是,这种认为是错误的。——- 现在看来,我更加喜欢这样的理解:我们把原序列加上一个关键字,按加上的关键字来进行排序。

总结:


简单来说,我们的高阶函数用起来更加方便。更加的抽象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值