浅谈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使用reportlab画图示例(含中文汉字)
Dec 03 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
Python实现句子翻译功能
Nov 14 Python
解决pycharm界面不能显示中文的问题
May 23 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
Django 连接sql server数据库的方法
Jun 30 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
Django后台admin的使用详解
Jul 08 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
Keras自定义IOU方式
Jun 10 Python
Python读写Excel表格的方法
Mar 02 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
php数组总结篇(一)
2008/09/30 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
python引用DLL文件的方法
2015/05/11 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
校本教研工作方案
2014/01/14 职场文书
项目施工员岗位职责
2014/03/09 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
公司合作协议范文
2014/10/01 职场文书
党员活动总结
2015/02/04 职场文书
养成教育工作总结
2015/08/13 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Golang入门之计时器
2022/05/04 Golang