Python下小米加步枪lambda和相关函数使用
什么是lambda
lambda
定义匿名函数,并不会带来程序运行效率的提高,只会使代码更简洁, 为了减少单行函数的定义而存在的。
lambda
的使用大量简化了代码,使代码简练清晰。但是值得注意的是,这会在一定程度上降低代码的可读性。如果是初学Python的人也许会对此比较难理解。
如果可以使用for...in...if
来完成的,坚决不要用lambda,因为如果你的代码包含循环,如果有,宁愿定义函数来完成,使代码获得可重用性和更好的可读性。
如果你就是喜欢用lambda
来做,那也无可厚非,但是有内置函数减弱了代码的可读性!
好了介绍完成了lambda
,那就让我们来实际用一下,实例如下:
与其他函数的结合
下面我们再来看看小米加上步枪的结合使用。
1. reduce + lambda
什么是reduce
:
Python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(列表,元组等)中的所有数据进行如下操作:
传给reduce中的函数func() (必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
关于Python reduce的详细解析,后续详细介绍,下面我们介绍一下reduce + lambda
的应用案例:
#!/usr/local/bin/python3
# Author: nock
"""
首先在Python3版本中,直接使用reduce()的话,系统会报错,提示不存在reduce()函数, 在Python3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里, Python2可以直接import
"""
from functools import reduce
num_list = [1, 2, 3, 4, 5]
result = reduce(lambda x,y: x+y, num_list)
print(result)
这种方式用lambda表示来当做参数,因为没有提供reduce的第三个参数,所以
第一次
执行时x=1, y=2
,第二次
则x=1+2, y=3
即列表的第三个元素。
等同于:
#!/usr/local/bin/python3
# Author: nock
from functools import reduce
num_list = [1, 2, 3, 4, 5]
result = reduce(lambda x,y: x+y, num_list, 0)
print(result)
# result等于 15
这种方式没用lambda当做参数,因为指定了reduce的第三个参数为0,所以的第一次执行时
x=1, y=2
, 第二次则x=1+2, y=3
, 即列表的第三个元素。 假设指定reduce的第三个参数为100,那么第一次执行x=100
,y
依然是遍历列表中的元素,最后结果就是115。
执行过程视图:
2. map + lambda
什么是map
:
map函数应用于每一个可迭代的项,返回的结果是一个list
。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
语法: map(func, seq1[, seq2...] )
Python函数式编程中的map()
函数是将func作用于seq中的每一个元素,并用一个列表给出返回值。如果func为None,作用同zip()。
#!/usr/local/bin/python3
# Author: nock
num_list = [1, 2, 3]
new_list = list(map(lambda i: i + 1, num_list))
print(new_list)
# result: [2, 3, 4]
如上,使用map函数将会对列表中的所有元素操作; map中有2个参数(函数, 列表), 它会在内部遍历列表中的每一个元素,执行传递过来的函数参数,然后输出到新的列表中。
执行过程视图:
map
同时也可以实现多个列表相加:
#!/usr/local/bin/python3
# Author: nock
list_one = [1, 2, 3]
list_two = [4, 5, 6]
new_list = list(map(lambda x,y: x + y, list_one, list_two))
print(new_list)
# result: [5, 7, 9]
说明:
这里需要注意的是: 使用Python3的时候,map函数有一个变化那就是,如果不在map前加上list,lambda函数根本就不会执行。
在Python2中,map会直接返回结果:
而在Python3下面,返回的就是一个map对象
:
<map object at 0x7f381112ad50>
所以,Python3环境下,如果要得到结果,必须用list作用于这个map对象。
3. filter + map
什么是filter
:
filter()
函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
和map()
类似,filter()
也接收一个函数和一个序列, 和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
语法: filter(function or None, sequence)
, 简单示例如下:
#!/usr/local/bin/python3
# Author: nock
num_list = [100, 20, 24, 50, 110]
new_list = list(filter(lambda x: x < 50, num_list))
print(new_list)
# result: [20, 24]
filter
跟map一样,在Python3的环境下,必须加list转换类型,默认返回的是一个对象。
执行过程视图:
到这里Python小米加步枪几个函数结合使用简单介绍到这里就结束了,有什么不对的地方,可以留言交流并指正。
- D-Link系列路由器漏洞挖掘入门
- 大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的
- 在Atom中设置Python开发环境
- Kaggle赛题解析:逻辑回归预测模型实现
- Shield:支撑美团点评品类最丰富业务的移动端模块化框架开源了
- 点击块,让小块动起来 - 函数封装
- 玩玩文本挖掘-wordcloud、主题模型与文本分类
- Typecho 前台 getshell 漏洞分析
- 关于其他选择器以及选择器优先级详解
- 2016.05 第二周 群问题分享
- MyFlash——美团点评的开源MySQL闪回工具
- R语言关联规则可视化:扩展包arulesViz的介绍
- JS设置标签的内容和样式
- 大圣魔方——美团点评酒旅BI报表工具平台开发实践
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法