浅谈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 开发Activex组件方法
Nov 08 Python
python获取beautifulphoto随机某图片代码实例
Dec 18 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
Python中的pass语句使用方法讲解
May 14 Python
Python中subprocess的简单使用示例
Jul 28 Python
Unicode和Python的中文处理
Mar 19 Python
Django中cookie的基本使用方法示例
Feb 03 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
详解python运行三种方式
May 13 Python
python requests证书问题解决
Sep 05 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 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基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
PHP加密技术的简单实现
2016/09/04 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
js计数器代码
2006/11/04 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
python之wxPython应用实例
2014/09/28 Python
Python中的异常处理简明介绍
2015/04/13 Python
Python实现队列的方法
2015/05/26 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
详解python中eval函数的作用
2019/10/22 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
求职自我评价范文
2015/03/09 职场文书
民事二审代理词
2015/05/25 职场文书
雨中的树观后感
2015/06/03 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js