详解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实现随机密码字典生成器示例
Apr 09 Python
在Mac OS上搭建Python的开发环境
Dec 24 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Django 创建/删除用户的示例代码
Jul 24 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
基于python+selenium的二次封装的实现
Jan 06 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 Python
在python中实现导入一个需要传参的模块
May 12 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
js 字符串操作函数
2009/07/25 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
ReactNative中使用Redux架构总结
2017/12/15 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python常用算法学习基础教程
2017/04/13 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
python实现canny边缘检测
2020/09/14 Python
Python爬虫开发与项目实战
2020/12/16 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
人事专员的职责
2014/02/26 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
校运会班级霸气口号
2015/12/24 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python