专栏首页一番码客Python函数式编程之内置高阶函数

Python函数式编程之内置高阶函数

前面我们介绍了高阶函数,python自带了一些高阶函数,也就是python内置高阶函数。

map()

map()映射函数。

入参:一个参数是函数;另外一个参数是可迭代的对象。作用:map()映射函数将传入的函数依次作用到传入可迭代对象的每一个元素上, 得到一个新的可迭代对象并返回。

返回值:一个迭代器。

例子一:计算出列表[1, 2, 3, 4, 5]中所有元素的平方数。

#!/usr/bin/env python
old_list = [1, 2, 3, 4, 5]
def f(x):
return x*x
new_list = map(f, old_list)
print(new_list)
print(list(new_list))

输出结果:

<map object at 0x000002377541C3C8>
[1, 4, 9, 16, 25]

说明:

  • map() 函数返回的结果 new_list 是一个迭代器, 而迭代器是惰性序列, 因此可以通过list()函数把整个列表都计算出来后输出。
  • map()函数不改变原有序列, 而是返回一个新的序列。

例子二:将输入的用户名列表规范化,即修改为首字母大写,其余字母小写。

#!/usr/bin/env python
def CorrectName(name):
    return name.lower.capitalize()

bad_name = ['efon', 'mARk', 'fiGhtiNg']
good_name = map(CorrectName, bad_name)
print(bad_name)
print(list(good_name))

输出结果:

['efon', 'mARk', 'fiGhtiNg']
['Efon', 'Mark', 'Fighting']

说明:

  • Python lower() 方法转换字符串中所有大写字符为小写。
  • Python capitalize()将字符串的第一个字母变成大写,其他字母变小写。对于 8 位字节编码需要根据本地环境。

reduce()

类似于 map() 函数, reduce()函数可以把一个函数作用在一个序列上。

与 map()的区别在于, 这个传入的函数必须具有两个参数。

例子一:使用reduce()实现累加效果。

#!/usr/bin/env python
from functools import reduce
def f(x,y):
    return x+y
numbers = [1, 2, 3, 4, 5]
print(reduce(f,numbers))
print(sum(numbers))

输出结果:

15
15

说明:

reduce()执行过程为:

  • 首先计算前两个元素:f(1, 2), 结果为 3;
  • 再把计算结果和第三个元素进行计算:f(3, 3), 结果为6;
  • 紧接着把结果和第四个元素进行计算:f(6, 4), , 结果为10;
  • 继续把结果和第五个元素进行计算:f(10, 5), 结果为15。
  • reduce()函数还可以接收第 3个可选参数作为计算的初始值。比如print(reduce(f, numbers, 10)),结果将是25,因为首先计算f(10, 1)。

例子二:使用reduce()实现求乘积的功能。

#!/usr/bin/env python
from functools import reduce
def f(x,y):
    return x * y
numbers = [1, 2, 3, 4, 5]
print(reduce(f,numbers))

结果输出:

120

filter()

python内建的filter()函数用于过滤序列。与map()函数类似,filter() 函数也接收一个函数和一个序列。

不同之处在于,filter()函数把传入的函数依次作用于每个元素, 然后根据返回值是True还是False决定是保留还是丢弃该元素。

例子一:删除列表中的偶数, 保留奇数可以通过如下程序实现 。

#!/usr/bin/env python
def f(x):
    return x % 2 == 1
numbers = range(1, 11)
odds = filter(f, numbers)
print(list(odds))

输出结果:

[1,3,5,7,9]

例子二:使用filter()删掉一个序列中的所有空字符串。

#!/usr/bin/env python
def f(x):
    return x and x.strip()
old_strs = ['Efon', 'Mark', '', 'Fighting', '', None]
new_strs = filter(f, old_strs)
print(list(new_strs))

输出结果:

['Efon', 'Mark', 'Fighting']

sorted()

pytyon内置的 sorted()函数可以对序列中的元素进行排序。

例子一:将一个包含数字的序列从小到达进行排列:

numbers = [1, 2, -3, -4]
print(sorted(numbers))

输出结果:

[-4, -3, 1, 2]

说明:

  • python默认的字符串排序方法是按照 ASCII码的大小排列的。
  • 实际上, sorted()函数是高阶函数, 可以通过key接收一个函数自定义排序方法。比如传入绝对值函数abs。
  • 如果要实现反向排序,可以用reverse=True
  • 给字符排序时,如果要忽略首字母大、 小写的影响,可以用key=str.lower。

参考:- 《物联网Python开发实战》

本文分享自微信公众号 - 一番码客(efonmark),作者:一番

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python之函数式编程

    没有“边界效应”的函数:在任何情况下,使用相同参数调用函数产生的结果始终相同,即没有函数内部状态的变化会影响输出结果。在python中,如果函数里包含有全局变量...

    efonfighting
  • python套路-函数式编程之匿名函数与偏函数

    当调用函数时, 有时不需要显示定义好一个函数, 直接传入一个匿名函数更为方便。python可使用lambda表达式创建匿名函数。

    efonfighting
  • python之函数式编程之闭包

    闭包 ( Closure) 是词法闭包 ( Lexical Closure) 的简称, 是引用自由变量的函数。这个被引用的自由变量将与这个函数一同存在, 即使已...

    efonfighting
  • 安装elementaryos64位出现“无法将grub pc软件包安装到target中”的解决方法

    这个问题在安装32位系统时不会出现,64位系统才会出现,造成这个问题的原因是官方64位镜像的一个bug,缺少x86-pc这个目录,所以联网安装就可以解决,系统会...

    飞奔去旅行
  • Built-in Functions(p

        在python中有很多的内置函数,这些内置函数让我们更高效,在此将部分相关知识总结一下。

    py3study
  • python @的作用

    这只是我的个人理解: 在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@的这样的修饰符之后,会先解析@后的内...

    py3study
  • 围观|中国Martech生态究竟长什么样?

    前不久,关注Martech的国内知名新媒体弯弓研究院也制作并发布了2019中国营销技术生态图谱2.0版本。该图谱显示,原力大数据在会员管理、千人千面、销售自动化...

    数据猿
  • 腾讯云函数访问VPC网络架构优化

    上篇《腾讯云函数计算冷启动优化实践》文章,主要讲解了云函数冷启动方面的优化实践。Serverless中的函数除了计算任务外,绝大部分还有网络访问需求,本篇文章,...

    腾讯云serverless团队
  • python3–函数

    老七Linux
  • 编写兼容 Python 2.x 和 3.

    当我们正处于Python 2.x到Python 3.x的过渡期时,你可能想过是否可以在不修改任何代码的前提下能同时运行在Python 2和3中。这看起来还真是一...

    py3study

扫码关注云+社区

领取腾讯云代金券