浅谈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实现115网盘自动下载的方法
Sep 30 Python
简单的Python抓taobao图片爬虫
Oct 26 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
Python tkinter模版代码实例
Feb 05 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
pandas DataFrame运算的实现
Jun 14 Python
通过实例简单了解python yield使用方法
Aug 06 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
微信小程序常用简易小函数总结
2019/02/01 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
省三好学生申请材料
2014/01/22 职场文书
材料加工工程求职信
2014/02/19 职场文书
经典禁毒标语
2014/06/16 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript