浅谈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人人网登录应用实例
Sep 26 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
python获取外网ip地址的方法总结
Jul 02 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
谈一谈基于python的面向对象编程基础
May 21 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Python多线程正确用法实例解析
May 30 Python
keras实现多种分类网络的方式
Jun 11 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
pytorch model.cuda()花费时间很长的解决
Jun 01 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代码
2006/12/06 PHP
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
9个比较实用的php代码片段
2016/03/15 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
javascript 写类方式之十
2009/07/05 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
js canvas实现写字动画效果
2018/11/30 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python写xml文件的操作实例
2014/10/05 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
通信生自我鉴定
2014/01/18 职场文书
中学生个人自我评价
2014/02/06 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python