浅谈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常见文件操作的函数示例代码
Nov 15 Python
推荐11个实用Python库
Jan 23 Python
python3如何将docx转换成pdf文件
Mar 23 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
python 字典操作提取key,value的方法
Jun 26 Python
Python转换时间的图文方法
Jul 01 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python打开使用的方法
Sep 30 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
python模拟斗地主发牌
Apr 22 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
php实现微信支付之现金红包
2018/05/30 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
发布你的Python模块详解
2016/09/15 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
python实现简易学生信息管理系统
2020/04/05 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
北京天润融通.net面试题笔试题
2012/02/20 面试题
英语专业推荐信
2013/11/16 职场文书
会计与审计毕业生自荐信范文
2013/12/30 职场文书
自我评价范文分享
2014/01/04 职场文书
负责人任命书范本
2014/06/04 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
责任书格式
2015/01/29 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技