浅谈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语法快速入门指南
Oct 12 Python
Python 基础教程之包和类的用法
Feb 23 Python
Python数据集切分实例
Dec 08 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
Python中断多重循环的思路总结
Oct 04 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
Mar 06 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
django 外键创建注意事项说明
May 20 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Python预测2020高考分数和录取情况
Jul 08 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 Python
Python数组变形的几种实现方法
May 30 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
JS实现字符串翻转的方法分析
2018/08/31 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python读写docx文件的方法
2018/05/08 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
英国日常交易网站:Wowcher
2018/09/04 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
求职信模版
2013/11/30 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
空乘英文求职信
2014/04/13 职场文书
精神病医院见习报告
2014/11/03 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python