浅谈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创建xml的方法
Mar 10 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
python脚本监控Tomcat服务器的方法
Jul 06 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
python实现高效的遗传算法
Apr 07 Python
Python echarts实现数据可视化实例详解
Mar 03 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
德生PL660的电路分析和打磨
2021/03/02 无线电
php 生成饼图 三维饼图
2009/09/28 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
图解javascript作用域链
2019/05/27 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python3多线程操作简单示例
2018/05/22 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
python交换两个变量的值方法
2019/01/12 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
应届大学生求职的自我评价
2013/11/17 职场文书
代理班主任的自我评价
2014/02/04 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android