python fd函数_Python高阶函数

所谓高阶函数(Higher-order function),是指将其他函数作为参数的函数。这有助于增强 Python,使我们的代码更加简单、可读。

常见的高阶函数有:map()、filter()、reduce()、sorted(),一起来看看它们的用法吧!

345bfb7a6b3de714dc3cdd80cb313b4a.png

网络图片,很形象

5ea1c4c44260b825398ae8bacaa2c386.png

1

map()

基础语法:

map(func, *iterables) --> map object

作用:对序列进行函数映射。

原理:func 函数将作用于 iterables 的每一项,最后将结果作为新的迭代器返回。

例如,要得到 10 以内的偶数,可以这样写:

>>> evens = map(lambda n: n*2, range(5))

>>> evens

在这里,map 返回了一个迭代器,好处是它节省了内存,但不好的一点是只能迭代一次。

如果需要多次迭代,或者按索引访问元素,那么可以从迭代器中创建一个列表:

>>> evens = list(map(lambda n: n*2, range(5)))

>>> evens

[0, 2, 4, 6, 8]

2

filter()

基础语法:

filter(function or None, iterable) --> filter object

作用:过滤掉序列中不符合条件的元素,这通常适用于序列元素需要删减的情况。

原理:function 函数将作用于 iterable 的每一项,只有当 function 返回 True 时,元素才会被留下来。

同样,也可以使用 filter 获得 10 以内的偶数:

>>> evens = filter(lambda n: n%2==0, range(10))

>>> evens

与 map 类似,可以从迭代器中创建一个列表:

>>> evens = list(filter(lambda n: n%2==0, range(10)))

>>> evens

[0, 2, 4, 6, 8]

3

reduce()

基础语法:

reduce(function, sequence[, initial]) -> value

作用:对序列中的每一项进行累计操作。

原理:用函数 function 先对 sequence 中的第 1、2 个元素操作,得到的结果再与第 3 个元素操作 ... 以此类推,最后得到一个结果。

有了这个函数,再来重新实现下《Python 递归函数》中的阶乘:

>>> from functools import reduce

>>>

>>> def factorial(n):

...     def mult(a, b):

...         return a*b

...     return reduce(mult, range(1, n+1), 1)

...

>>>

注意:在 Python 2.x 中,reduce() 是一个内置函数。但在 3.x 中,它被移至 functools 模块。因此,在使用前要先进行导入。

尝试一下,传递几个不同的值:

>>> factorial(0)

1

>>> factorial(1)

1

>>> factorial(5)

120

4

sorted()

基础语法:

sorted(iterable, /, *, key=None, reverse=False)

作用:对所有可迭代的对象进行排序操作。它返回了一个新列表,其中包含了 iterable 中的所有项(已排序)。

原理:通过 key 函数来对 iterable 的每一项进行排序,排序规则取决于 reverse,为 True 时按降序排列,为 False 时按升序排列(默认)。

需要注意的是,sorted() 并不会对序列本身进行排序,排序的是返回的新列表:

>>> l = ['Python', 'PHP', 'Java']

>>>

>>> sorted_l = sorted(l)

>>>

>>> l         # 本身并未排序

['Python', 'PHP', 'Java']

>>>

>>> sorted_l  # 排序的是返回的新列表

['Java', 'PHP', 'Python']

再来看看降序,和自定义排序:

>>> sorted(l, reverse=True)  # 按降序排列

['Python', 'PHP', 'Java']

>>>

>>> sorted(l, key=len)       # 按字符串的长度排序

['PHP', 'Java', 'Python']

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值