对于那些快速算法,我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们。

—— Douglas Jones

目录

高阶函数一般以函数为参数。

本节我们介绍Python 中三个方便的高阶函数,分别是:

map

reduce

filter

如果你了解过分布式系统框架---Hadoop,你应该知道map/reduce 的概念。

Python 中的map/reduce 函数与Hadoop 中的map/reduce 基本类似。

1,map 函数

在Python2 中,map 是一个函数。在Python3 中,map 是一个类:

>>> map

作用:将函数func 作用于可迭代对象iterable 中的每一个元素

原型:map(func, iterable) -> map object

参数 func:一个函数类型的参数,该函数接收一个参数,并返回一个值

参数 iterable:一个可迭代的对象

返回值:一个map 对象,同时一个迭代器

示例:

>>> m = map(lambda x: x * x, [1, 3, 5])

>>> m

>>> l = [i for i in m]

>>> l

[1, 9, 25]

参数func 可以是普通函数,也可以是匿名函数,我们这里使用了匿名函数lambda x: x * x,该函数接收一个参数,并返回该参数的平方。

可迭代对象是一个列表[1, 3, 5],列表中的每个元素,都将传递到匿名函数中,并对每一个元素计算平方后,将结果存储到一个map 对象m 中。

为了查看m 中的值,我们使用列表推导式生成了一个列表l,可看到列表l 就是[1, 9, 25],就是[1, 3, 5] 中每个元素的平方。

这就是python3 中map 的基本使用方法。

2,reduce 函数

在Python3 中,reduce 函数被放在functools 模块,使用时,要先从functools 模块引入:

>>> from functools import reduce

作用:将函数func 作用于序列seq 中的元素,进行一系列的计算

原型:reduce(func, seq[, initial]) -> value

参数 func:这是一个函数类型的参数,该函数接收两个参数,并返回一个值

参数 seq:一个序列

参数 initial:

当initial 存在时:reduce(func, [x1, x2, x3], initial) = func(func(func(initial, x1), x2), x3)

当initial 不存在时:reduce(func, [x1, x2, x3]) = func(func(x1, x2), x3)

返回值:返回计算结果

示例,当initial 存在时:

>>> reduce(lambda x, y : x * y, [1, 3, 5], 6)

90

# reduce(func, [1, 3, 5], 6)

# = func(func(func(6, 1), 3), 5)

# = ((6 * 1) * 3) * 5

# = 90

示例,当initial 不存在时:

>>> reduce(lambda x, y : x * y, [1, 3, 5])

15

# reduce(func, [1, 3, 5])

# = func(func(1, 3), 5)

# = (1 * 3) * 5

# = 15

3,filter 函数

在Python3 中,filter 是一个类:

>>> filter

作用:filter 用于对可迭代对象iterable 进行过滤,iterable 中的每一个元素会作为一个参数,传递到func 中

原型:filter(func, iterable) --> filter object

参数 func:这是一个函数类型的参数,该函数接受一个参数,返回一个bool 值

当func 返回True 时:对应的iterable 中的元素,会放在结果集中

当func 返回False 时:对应的iterable 中的元素,不会放在结果集中

返回值:一个filter 对象,同时也是一个迭代器

示例:

>>> f = filter(lambda x: len(x) == 2, ['dsf', 'df', 'ad', 'dfas', 'as'])

>>> f # 一个 filter 对象

>>> list(f) # 转化为列表,方便查看

['df', 'ad', 'as']

(完。)

推荐阅读:

欢迎关注作者公众号,获取更多技术干货。

python高阶函数教学_Python 简明教程 --- 16,Python 高阶函数相关推荐

  1. python以字典初始化数据_Python 简明教程 ---12,Python 字典

    代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用的数据结构,在Python 中用dict 表示,是英文dictionary 的缩写. >> ...

  2. python进阶路线知乎_Python学习教程(Python学习路线):第九天-面向对象进阶

    面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...

  3. python多态_Python 简明教程 21,Python 继承与多态

    程序不是年轻的专利,但是,它属于年轻. 目录 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面向对象语言都会提供这些机制. 1,封装 在这一节介绍类的私有属性和方法的时候,我们已经讲到过封 ...

  4. python编写字符串查找函数_Python 简明教程 --- 8,Python 字符串函数

    好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- Steve McConnell 目录 字符串有很多操作函数,所以,这里我们专门用一节来介绍这些函数. 建 ...

  5. python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  6. python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

  7. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  8. python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...

    前面简单介绍了python基本运算,这里再来简单讲述一下Python字符串相关操作 1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号 ...

  9. python继承和多态_Python 简明教程 --- 21,Python 继承与多态

    程序不是年轻的专利,但是,它属于年轻. 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面向对象语言都会提供这些机制. 1,封装 在这一节介绍类的私有属性和方法的时候,我们已经讲到过封装. ...

最新文章

  1. php 超全局变量(整理)
  2. 小程序分享到朋友圈功能_来啦!小程序支持分享朋友圈
  3. Mybatis源码分析--Mapper接口的代理生成原理
  4. Android之给gridview的单元格加上分割线
  5. [leetcode]687. Longest Univalue Path
  6. 训练日志 2019.4.14
  7. 单体应用微服务改造实践
  8. Python生成(x,y,z)三维坐标序列
  9. 关于IE8以上 不引人css 症状
  10. java中io各种流的关闭顺序
  11. 二叉搜索树(二叉排序树)
  12. 第二个案例实操——创建Bean类
  13. Firefox4开发计划公布:使浏览器得更快更强
  14. oracle mysql odbc驱动程序_用于 Oracle 的 ODBC 驱动程序
  15. 梯度,散度,旋度的概念
  16. MATLAB图形计算器去广告,Mathlab Pro安卓去谷歌版下载-Mathlab计算器安卓去广告版下载v4.11.114 手机版-西西软件下载...
  17. Roofline-on-NVIDIA-GPUs代码分析
  18. Android高级工程师进阶学习,分享PDF高清版
  19. 正则表达式中/g的用法
  20. 『Citric』天空中的繁星 · DP

热门文章

  1. MATLAB元胞自动机报告,元胞自动机概述与MATLAB实现
  2. Linux中对进程的管理
  3. c语言中字母的定义,c语言字符串定义与初始化 - 且听风吟
  4. mysql什么情况会刷脏页_mysql-刷脏页(12)
  5. 面试官:HashSet是如何保证元素不重复的?
  6. 工作中常用的 6 种设计模式!
  7. 部分排序算法c语言实现
  8. Latex的subcaption横向插入两张子图的的用法
  9. ssh远程执行命令 linux,【Linux】SSH 远程执行命令
  10. 中有冒号 文件路径_用Matlab脚本文件实现Excel文件的合并