浅谈python之高阶函数和匿名函数


Posted in Python onMarch 21, 2019

map()

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

def func(x):
 return x*x

r = map(func, [1, 2, 3, 4, 5])
print(type(r))
r = list(r)
print(r)

输出结果:

<class 'map'>
[1, 4, 9, 16, 25]

可以看出,map让函数func作用于列表的每一项,使列表的每一项都被函数func执行一次,即列表的每一项都进行平方。其返回值是map类型。

reduce()

reduce函数必须接收两个参数,把一个函数作用在一个序列[x1, x2, x3, ...]上,然后再把结果继续和序列的下一个元素做累积计算。

from functools import reduce

def fn(x, y):
 return x * 10 + y

f = reduce(fn, [1, 3, 5, 7, 9]) # 把序列变为整数
print(f)
print(type(f))

输出结果:

13579
<class 'int'>

和map不同,虽然reduce也是作用于每个元素,但是reduce的作用结果要用在下次和另一个元素做累积计算。

map()和reduce()的结合使用

from functools import reduce

def fn(x, y):
 return x * 10 + y

def char2num(s):
 digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
 return digits[s]

f = reduce(fn, map(char2num, '13579'))
print(f)

输出结果:

13579

可以将字符串类型转换为int类型

filter()

filter()函数用于过滤序列,接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

def not_empty(s):
  return s and s.strip()# 不能直接写s.strip()
 
 f = filter(not_empty, ['A', '', 'B', None, 'C', ' '])
 print(type(f))
 print(list(f))

输出结果:

<class 'filter'>
['A', 'B', 'C']

sorted()

sorted()函数也是一个高阶函数,在列表的学习中初步接触了sorted(),但其实它还可以接收一个key函数来实现自定义的排序。

key指定的函数将作用于被排序对象的每一个元素上,并根据key函数返回的结果进行排序。

l = sorted([36, 5, -12, 9, -21], key=abs) # 按绝对值大小排序
print(l)

s = sorted(['bob', 'about', 'Zoo', 'Credit'])  # 按ASCII大小排序
print(s)

sl = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) # 忽略大小写排序
print(sl)

sr = sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)  # 反向排序
print(sr)

输出结果:

[5, 9, -12, -21, 36]
['Credit', 'Zoo', 'about', 'bob']
['about', 'bob', 'Credit', 'Zoo']
['Zoo', 'Credit', 'bob', 'about']

同样的,sorted()也可以对元组和字典进行排序

from operator import itemgetter
# 需要使用operator模块
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
print(sorted(L, key=itemgetter(0)))

输出结果:

[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

 当然,也能以values的值来排序,对字典的排序与元组类似,但返回值不同。

from operator import itemgetter

dic = {"Bob": 75, "Adam": 92, "Lisa": 88}

print(sorted(dic,key=itemgetter(0)))

print(sorted(dic, key=itemgetter(1)))

 输出结果:

['Adam', 'Bob', 'Lisa']
['Adam', 'Lisa', 'Bob']

可以看到,不管是以key值进行排序,还是以value值进行排序,排序结果只返回对应顺序的key值。

匿名函数

f = list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
print(f)

输出结果:

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

上面就是一个匿名函数的使用,匿名函数 lambda x: x * x 实际上就是:

def f(x):
 return x * x

只是在这里没有显式地定义函数,这样因为函数没有名字,不必担心函数名冲突,而且代码看起来也简洁。

以上所述是小编给大家介绍的python之高阶函数和匿名函数详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
python下MySQLdb用法实例分析
Jun 08 Python
Python可变参数函数用法实例
Jul 07 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
详解python3百度指数抓取实例
Dec 12 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
详解python的ORM中Pony用法
Feb 09 Python
Python语言进阶知识点总结
May 28 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python简单的三元一次方程求解实例
Apr 02 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
Python pandas求方差和标准差的方法实例
Aug 04 Python
浅谈Python反射 &amp; 单例模式
Mar 21 #Python
详解Python中is和==的区别
Mar 21 #Python
浅谈Python的条件判断语句if/else语句
Mar 21 #Python
python使用thrift教程的方法示例
Mar 21 #Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 #Python
详解python使用turtle库来画一朵花
Mar 21 #Python
python中import与from方法总结(推荐)
Mar 21 #Python
You might like
构建简单的Webmail系统
2006/10/09 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
php模板原理讲解
2013/11/13 PHP
php正则表达式学习笔记
2015/11/13 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
微信小程序实现星星评分效果
2020/11/01 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
python 3.7.0 下pillow安装方法
2018/08/27 Python
python对日志进行处理的实例代码
2018/10/06 Python
python:接口间数据传递与调用方法
2018/12/17 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
超市仓管员岗位职责
2014/04/07 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
文化苦旅读书笔记
2015/06/29 职场文书