浅谈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写的贪吃蛇游戏例子
Jun 16 Python
python中split方法用法分析
Apr 17 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Python类属性与实例属性用法分析
May 09 Python
Python线程详解
Jun 24 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
django+js+ajax实现刷新页面的方法
May 22 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
python3实现弹弹球小游戏
Nov 25 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
通过实例解析python subprocess模块原理及用法
Oct 10 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 XML Expat解析器知识点总结
2019/02/15 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
深入探究node之Transform
2017/07/20 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
python实现给微信公众号发送消息的方法
2017/06/30 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Python爬取网站图片并保存的实现示例
2021/02/26 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
护士自我鉴定怎么写
2014/02/07 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
博士生专家推荐信
2014/09/26 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android