微信公众号:码农充电站pro

个人主页:https://codeshellme.github.io

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

—— Douglas Jones

目录

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

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

  • map
  • reduce
  • filter

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

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

1,map 函数

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

>>> map
<class 'map'>

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

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

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

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

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

示例:

>>> m = map(lambda x: x * x, [1, 3, 5])
>>> m
<map object at 0x7fe60bb1bf98>
>>> 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
<class '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 对象
<filter object at 0x7f4dff484748>
>>> list(f) # 转化为列表,方便查看
['df', 'ad', 'as']

(完。)


推荐阅读:

Python 简明教程 --- 11,Python 元组

Python 简明教程 --- 12,Python 字典

Python 简明教程 --- 13,Python 集合

Python 简明教程 --- 14,Python 数据结构进阶

Python 简明教程 --- 15,Python 函数


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

Python 简明教程 --- 16,Python 高阶函数的更多相关文章

  1. 初学 Python(十二)——高阶函数

    初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...

  2. python入门16 递归函数 高阶函数

    递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...

  3. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  4. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  5. Learning Python 012 函数式编程 1 高阶函数

    Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...

  6. python基础之常用的高阶函数

    前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...

  7. Python嵌套、递归、高阶函数

    一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...

  8. python六十四课——高阶函数练习题(二)

    总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...

  9. python六十二课——高阶函数之filter

    高阶函数之:filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)解释:filter的意思:在计算机领域中我们都称为过滤器格式:filter(fn,lsd):参数和ma ...

随机推荐

  1. 10 个提高效率的 Linux 命令别名

    在 Linux 环境下工作的工程师,一定会对那些繁琐的指令和参数命令行印象深刻吧.而且,可怕的不是繁琐,而是需要大量重复输入这些繁琐的命令. 在 Linux 下我们有个别名命令 alias ,可以将那 ...

  2. JAVA实现对称加密

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.对称加密算法DES 1.概述:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这 ...

  3. Java实现 LeetCode 639解码方法 2(递推)

    639. 解码方法 2 一条包含字母 A-Z 的消息通过以下的方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 除了上述的条件以外,现在加密字符串可以 ...

  4. Java实现第九届蓝桥杯全球变暖

    全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...

  5. 本地配置gitee

    一 下载工具 Git-2.62.0-64-bit.exe 以上工具版本号不需要一样,安装完前两个后重新启动系统,再安装第3个. 二 码云网站注册 https://gitee.com/ 使用邮箱注册 注 ...

  6. Python--函数&过程

    函数式编程与过程式编程打的区分:过程是没有返回值的函数,过程在python3中也有返回值,为None 函数的作用:代码复用.保持代码的一致性.使代码更容易扩展 过程的定义与调用: 1 def func ...

  7. 在PyQt5中显示matplotlib绘制的图形

    import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import * from plot_pyqt import PlotCanva ...

  8. 杨辉三角 js 练习

    //打印杨辉三角a[[],[],[]] function fn(n){ //i=0 1 2 3.. var a = new Array(n); //行 1 2 3 4.. 创建二维数组. for(va ...

  9. 【Jmeter】分布式压测环境配置

    注意:以下四点都必须一致 1.jmeter版本 2.内置插件 3.jdk版本1.8以上 4.同属一个局域网 助攻机设置 本机助攻机Linux系统,首先需要安装JDK并配置环境 JDk基本安装及配置环境 ...

  10. LOJ 3045: 洛谷 P5326: 「ZJOI2019」开关

    题目传送门:LOJ #3045. 题意简述 略. 题解 从高斯消元出发好像需要一些集合幂级数的知识,就不从这个角度思考了. 令 \(\displaystyle \dot p = \sum_{i = 1 ...