浅谈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实现apahce网站日志分析示例
Apr 02 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
Python File readlines() 使用方法
Mar 19 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
通过python将大量文件按修改时间分类的方法
Oct 17 Python
python增加图像对比度的方法
Jul 12 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
详解anaconda离线安装pytorchGPU版
Sep 08 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
杏林同学录(二)
2006/10/09 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
js微信分享实现代码
2020/10/11 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
在Python3中初学者应会的一些基本的提升效率的小技巧
2015/03/31 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
python打开使用的方法
2019/09/30 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
教师年终个人自我评价
2013/10/04 职场文书
创先争优制度
2014/01/21 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
主持人演讲稿
2014/05/13 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书