详解Python高阶函数


Posted in Python onAugust 15, 2020

本文要点

1.什么是高阶函数

2.python中有哪些常用的高阶函数

什么是高阶函数?

在了解什么是高阶函数之前,我们来看几个小例子。我们都知道在 python 中一切皆对象,函数也不例外。比如求绝对值函数 abs,我们可以用一个变量 f 指向 abs 函数,那么当调用 f() 的时候可以得到和 abs() 一样的效果,这说明变量可以指向函数!

详解Python高阶函数

同理我们将 abs 指向另一个函数 abs = len,那么 abs 将不再是求绝对值的函数了,abs指向的是求长度的 len 函数。这说明函数名其实就是指向函数的变量!

详解Python高阶函数

既然变量可以指向函数,而函数的参数可以接收变量。也就是说一个函数可以接收另一个函数作为参数。下面我们来看一个DEMO。定义一个 add 函数,它接受三个参数 x, y, f,其中 x, y 是数字,f 是一个函数。

def add(x, y, f):
  return f(x) + f(y)

result = add(-12, -98, abs)
print(result)

输出结果:110

上面的 add() 函数就是一个高阶函数,其实高阶函数的概念很简单,能接收函数作参数的函数就是高阶函数。

python中常用的高阶函数

1.map()

map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于 list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把 list 的每个元素都作平方,就可以用 map() 函数:

因此,我们只需要传入函数 f(x)=x * x,就可以利用 map() 函数完成这个计算:

def add(x, y, f):
  return f(x) + f(y)

result = add(-12, -98, abs)
print(result)

输出结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

注意:map() 函数不改变原有的 list,而是返回一个新的 list。

由于 list 包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

2.reduce()

reduce() 函数接收的参数和 map() 类似,一个函数 f,一个 list,但行为和 map() 不同,reduce() 传入的函数 f 必须接收两个参数,reduce() 对 list 的每个元素反复调用函数 f,并返回最终结果值。

下面我们来看个 demo:

def prod(x, y):
 return x * y


print(reduce(prod, [2, 4, 5, 7, 12]))

输出结果:3360

prod() 函数接收两个参数,返回 x 和 y 的乘积

调用 reduce(prod, [2, 4, 5, 7, 12]) 时,reduce 函数将做如下计算:

先计算头两个元素prod(2, 4)结果为:8,

再把计算结果和第3个元素传给 prod(8, 5) 结果为:40,

再把计算结果和第4个元素传给 prod(40, 7) 结果为:280,

再把计算结果和第5个元素传给 prod(280, 12) 结果为:3360,

由于没有更多元素了,最终返回结果:3360

reduce() 还可以接收第 3 个可选参数,作为计算的初始值。如果把初始值设为 100,计算:

reduce(prod, [2, 4, 5, 7, 12], 100)

结果变为:336000,因为第一轮的计算是:

计算初始值和第一个元素:prod(100, 2),结果为:200。

3.filter()

filter() 又可以叫做过滤函数,它接收一个函数 f 和一个 list,这个函数 f 的作用是对每个元素进行判断,返回 True 或 False,filter() 根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新 list。

例如,要从一个 list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:

def is_odd(x):

 if x % 2 == 1:
 return x

然后用 filter() 过滤掉偶数:

print(list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17])))

结果:[1, 7, 9, 17]

利用 filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:

def is_not_empty(s):
 return s and len(s.strip()) > 0

print(list(filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])))

以上就是详解Python高阶函数的详细内容,更多关于Python高阶函数的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
Python使用gRPC传输协议教程
Oct 16 Python
Python常见的pandas用法demo示例
Mar 16 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python截图并保存的具体实例
Jan 14 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
python 19个值得学习的编程技巧
Aug 15 #Python
解析python 类方法、对象方法、静态方法
Aug 15 #Python
浅谈python锁与死锁问题
Aug 14 #Python
Python3.8安装Pygame教程步骤详解
Aug 14 #Python
Python configparser模块应用过程解析
Aug 14 #Python
PyCharm 2020.2 安装详细教程
Sep 25 #Python
Python logging模块handlers用法详解
Aug 14 #Python
You might like
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python语法快速入门指南
2015/10/12 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
python 高阶函数简单介绍
2021/02/19 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
标准化管理实施方案
2014/02/25 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
民事赔偿协议书
2014/11/02 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
合作意向书怎么写
2019/06/24 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫