详解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自定义类并使用的方法
May 07 Python
Python中isnumeric()方法的使用简介
May 19 Python
Python变量和字符串详解
Apr 29 Python
Python装饰器实现几类验证功能做法实例
May 18 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
python3中eval函数用法使用简介
Aug 02 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 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
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
ES6正则表达式扩展笔记
2017/07/25 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
浅谈Node模块系统及其模式
2017/11/17 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
功能完善的小程序日历组件的实现
2020/03/31 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
python对url格式解析的方法
2015/05/13 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python集合常见运算案例解析
2019/10/17 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python实现智能语音天气预报
2019/12/02 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
材料会计岗位职责
2014/03/06 职场文书
电视购物广告词
2014/03/19 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
万能检讨书2000字
2014/10/17 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
小鞋子观后感
2015/06/05 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript