微信公众号:码农充电站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. 电子邮件协议及GO发送QQ邮件

    目录 一.电子邮件的工作机制 1.1 SMTP 1.2 POP3 1.3 IMAP 二.邮件地址 三.MIME信息 四.使用golang发送qq邮件 一.电子邮件的工作机制 提供电子邮件服务的协议叫做 ...

  2. 如何管理win系列服务器,win10 pro如何 使用远程桌面

    远程桌面,大家都理解,专业的运维人员都是连接上百台服务器进行操作管理工作. 先介绍一款专业的远程桌面管理工具:iis7远程桌面批量管理  win10 pro如何 使用远程桌面? 一. 首先在win10 ...

  3. wavenet重要概念

    带洞因果卷积 https://img-blog.csdn.net/20181021210509222?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dl ...

  4. DCL单例为什么要加Volatile

    拿一个对象创建赋值来说 class T{ int elem = 1; } T t = new T(); 上段代码转换成汇编码为: 0 new #2 <T> 3 dup 4 invokesp ...

  5. Java实现洛谷P1250 种树 (暴力)

    P1250 种树 输入输出样例 输入 9 4 1 4 2 4 6 2 8 9 2 3 5 2 输出 5 PS: 我种最少的树,意味着我的树要最多的被利用,意味着,我的树要尽可能的靠中间种, 也就是我把 ...

  6. Java实现字符串的包含

    1 问题描述 给定一长字符串A和一短字符串B.请问,如何最快地判断出短字符串B中的所有字符是否都在长字符串A中?请编写一个判断函数实现此功能. 为简单起见,假设输入的字符串只包含小写英文字母.下面举几 ...

  7. java实现第九届蓝桥杯最大乘积

    最大乘积 把 1~9 这9个数字分成两组,中间插入乘号, 有的时候,它们的乘积也只包含1~9这9个数字,而且每个数字只出现1次. 比如: 984672 * 351 = 345619872 98751 ...

  8. Java实现第八届蓝桥杯日期问题

    日期问题 题目描述 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/ ...

  9. PAT 反转链表

    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该 ...

  10. Java—JDBC向mysql数据库中给某个表添加数据时,会遇到的问题,如下

    解析(jar包该放在那里,以及其它的操作): 把jar包(驱动)添加到自己的项目中,最好新建一个文件夹,再把jar包(驱动包)添加到这个所新建的文件中 1.先建好自己的项目,再新建一个文件夹,如下: ...