浅谈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获取电脑硬件信息及状态的实现方法
Aug 29 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
Python实现完整的事务操作示例
Jun 20 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
python 默认参数相关知识详解
Sep 18 Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 Python
在notepad++中实现直接运行python代码
Dec 18 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
pytorch--之halfTensor的使用详解
May 24 Python
如何正确理解python装饰器
Jun 15 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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python运算符重载用法实例
2015/05/28 Python
用python与文件进行交互的方法
2018/03/01 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python 如何提高元组的可读性
2019/08/26 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
十八届三中全会感言
2014/03/10 职场文书
培训班主持词
2014/03/28 职场文书
高中生家长寄语大全
2014/04/03 职场文书
大学生村官考核材料
2014/05/23 职场文书
政府个人对照检查材料
2014/08/28 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
质量保证书格式
2015/02/27 职场文书
海洋天堂观后感
2015/06/05 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书