浅谈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读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
利用matplotlib为图片上添加触发事件进行交互
Apr 23 Python
python中shell执行知识点
May 06 Python
用Python开发app后端有优势吗
Jun 29 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
python空元组在all中返回结果详解
Dec 15 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
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
PHP Directory 函数的详解
2013/03/07 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
python的sorted用法详解
2019/06/25 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python实现两个文件夹的同步
2019/08/29 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
法律工作求职自荐信
2013/10/31 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
团干部培训方案
2014/06/03 职场文书
精神文明建设标语
2014/06/16 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
社会实践活动总结
2015/02/05 职场文书
安全教育日主题班会
2015/08/13 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python