Python 简明教程 --- 16,Python 高阶函数
微信公众号:码农充电站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 简明教程 --- 14,Python 数据结构进阶
欢迎关注作者公众号,获取更多技术干货。

Python 简明教程 --- 16,Python 高阶函数的更多相关文章
- 初学 Python(十二)——高阶函数
初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 ...
- python入门16 递归函数 高阶函数
递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- Learning Python 012 函数式编程 1 高阶函数
Python 函数式编程 1 高阶函数 高阶函数 Q:什么是高阶函数? A:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数. 简单举个例子: def add(x, y, f): return ...
- python基础之常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- Python嵌套、递归、高阶函数
一.嵌套函数 1.嵌套函数简单的理解可以看作是在函数的内部再定义函数,实现函数的“私有”. 2.特点: <1> 函数内部可以再次定义函数. <2> 只有被调用时才会执行(外部函 ...
- python六十四课——高阶函数练习题(二)
总结:高阶函数以及匿名函数之间的配合使用 from functools import reduce #模块一:lambda和filter的结合使用 #lt = [1,2,3,4,5,6,7,8,9] ...
- python六十二课——高阶函数之filter
高阶函数之:filter函数:过滤数据的,最终返回一个惰性序列对象(filter对象,迭代器对象)解释:filter的意思:在计算机领域中我们都称为过滤器格式:filter(fn,lsd):参数和ma ...
随机推荐
- ActiveMQ 笔记(七)ActiveMQ的多节点集群
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Activemq 的集群思想 1.使用Activemq集群的原因 面试题: 引入消息中间件后如何保证 ...
- MyBatis(二)参数传递和自定义结果集
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.myBatis的注解使用方式 package com.webcode.mapper; import ...
- Java实现 LeetCode 648 单词替换(字典树)
648. 单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other( ...
- Java实现 LeetCode 491递增子序列
491. 递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, ...
- Java实现第九届蓝桥杯书号验证
书号验证 2004年起,国际ISBN中心出版了<13位国际标准书号指南>. 原有10位书号前加978作为商品分类标识:校验规则也改变. 校验位的加权算法与10位ISBN的算法不同,具体算法 ...
- Mybatis连接池及事务
一:Mybatis连接池 我们在学习WEB技术的时候肯定接触过许多连接池,比如C3P0.dbcp.druid,但是我们今天说的mybatis中也有连接池技术,可是它采用的是自己内部实现了一个连接池技术 ...
- 小程序-你不得不知的Promise封装请求
放在开头 这是一个小程序的轮播图,但是为我们在请求api数据时,将请求wx.request代码封装调用 效果展示 代码篇 页面wxml 这里需要注意的是我们设置swiper和image标签时,有默认属 ...
- mysql基础之-mysql锁和事务(七)
0x01 MySQL锁: 执行操作时施加锁的模式 读锁:用户在读的时候施加的锁,为防止别人修改,但是用户可以读,还被称为共享锁 不会对其他用户进行阻塞 理解: ----->(这里的不阻塞,是可以 ...
- iOS-NSString常见方法
</pre><pre name="code" class="html">#import <Foundation/Foundatio ...
- 面试了 6 轮 Google 中国 之后,还是挂了
去年换工作的时候, 面试了一下 Google (这里说的是 Google 中国哈), 来了个 Google 面试六轮游, 结果是没通过.