设为首页 收藏本站
查看: 1226|回复: 0

[经验分享] 三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-22 08:33:11 | 显示全部楼层 |阅读模式
一、三元运算(式)
对于一般简单的if else条件判断句可以用三元运算来表示

具体模式为:
1
2
3
4
5
6
if condition:
  expr1
else:
  expr2
等价于:
expr1 if condition else expr2




解释:如果if condition条件成立就执行expr1表达式,否则就执行else expr2表达式
示例①
1
2
3
4
5
6
7
8
9
>>> if 2 == 2:
...    name = 'cool'
... else:
...    name ='hot'
...
>>> name = 'cool' if 2==2 else 'hot'
>>> print name
cool
>>>





二、lambda表达式:
对于简单的函数可以用另外一种方式来代替,即lambda

比如有如下函数:
1
2
3
4
5
6
7
8
>>> def fun(arg):
...      return arg + arg
...
>>>
>>> result = fun(100)
>>> print result
200
>>>



定义一个变量f_lambda,将lambda arg:arg+1赋予f_lambda
1
2
3
4
5
>>> f_lambda = lambda arg:arg +1
>>> result = f_lambda(111)
>>> print result
112
>>>



也可以用其他表达式:
1
2
3
4
5
>>> test = lambda a:a**2
>>> test_result = test(3)
>>> print test_result
9
>>>



从上面的例子可以看出,lambda后面表达式可以随意定义,只要符合Python的语法要求。
lambda表达式:
①用于处理简单逻辑
②会自动返回数据

三、内置函数map

map的作用是对序列中每个元素进行操作,然后输出新的序列

QQ截图20151222083202.png

1
2
3
4
5
6
7
8
9
10
>>> num1 = [10,9,8,7,6]
>>> num2 = map(lambda a:a**2,num1)
>>> print num2
[100, 81, 64, 49, 36]
>>>
>>> num3 = [1,2,3,4,5]
>>> num4 = map(lambda a,b:a -b,num1,num3)
>>> print num4
[9, 7, 5, 3, 1]
>>>



或者

1
2
3
4
5
6
7
8
>>> num = [12,33,55,85]
>>> def func(arg):
...     return arg + 10
...
>>> new_num = map(func,num)
>>> print new_num
[22, 43, 65, 95]
>>>




对于上述例子实质解释如下:
1
2
3
4
5
6
7
8
>>> new_num = []
>>> for item in num:
...     new_item = item + 10
...     new_num.append(new_item)
...
>>>
>>> print new_num
[22, 43, 65, 95]




四、内置函数filter

filter的作用的是将序列中满足条件的过滤出来然后形成新的序列
QQ截图20151222083226.png
1
2
3
4
5
>>> num1 = [10,9,8,7,6]
>>> tmp = filter(lambda arg:arg >5,num1)
>>> print tmp
[10, 9, 8, 7, 6]
>>>



或者
1
2
3
4
>>> tmp2 = filter(lambda n:n >5,num1)     
>>> print tmp2
[10, 9, 8, 7, 6]
>>>



或者
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33]
print filter(None,num)
[iyunv@Python day004]# python lam.py
[11, 22, 33]
[iyunv@Python day004]#
[iyunv@Python day004]# cat  lam.py   
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33,""]
print filter(None,num)
[iyunv@Python day004]# python lam.py  
[11, 22, 33]
[iyunv@Python day004]# cat  lam.py   
#!/usr/bin/env python
# -*- coding:utf8 -*-
num = [11,22,0,33,"",False]
print filter(None,num)
[iyunv@Python day004]# python lam.py  
[11, 22, 33]



小结:从上可以发现,默认情况下,当用filter进行处理数据时,filter会将布尔值为真的输出(一般将布尔值为True的返回到新列表中,反之不会返回到新列表中),为假的忽略掉;当然filter中也可以传入函数,如上例中的lambda语句;



五、内置函数reduce

reduce的作用是对序列内的所有元素进行操作
QQ截图20151222083248.png


1
2
3
4
5
6
7
8
9
>>> num1 = [10,9,8,7,6]                  
>>> result =reduce(lambda arg1,arg2:arg1+arg2,num1)
>>> print result
40
>>> num5 = [1,2,3,4,5,6]  
>>> sum = reduce(lambda a,b:a+b,num5)
>>> print sum
21
>>>



# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值

六、yield生成器

有如下例子:
1
2
3
4
5
>>> print range(8)
[0, 1, 2, 3, 4, 5, 6, 7]
>>> print xrange(8)
xrange(8)
>>>



从上面可以发现,range可以生成一个列表,即在内存中创建指定的数字,而xrange则不会,接着往下看:
1
2
3
4
5
6
7
8
9
10
11
12
>>> for n in xrange(8):
...     print n
...
0
1
2
3
4
5
6
7
>>>




xrange只有在进行循环的时候才会创建数字,即在迭代的时候才会去创建;





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-154528-1-1.html 上篇帖子: Python操作mysql数据库 下篇帖子: 利用Python脚本一键备份Mysql数据库 filter reduce 表达式 生成器 三元
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表