jjytr 发表于 2015-12-22 08:33:11

三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器

一、三元运算(式)
对于一般简单的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的作用是对序列中每个元素进行操作,然后输出新的序列




1
2
3
4
5
6
7
8
9
10
>>> num1 =
>>> num2 = map(lambda a:a**2,num1)
>>> print num2

>>>
>>> num3 =
>>> num4 = map(lambda a,b:a -b,num1,num3)
>>> print num4

>>>




或者


1
2
3
4
5
6
7
8
>>> num =
>>> def func(arg):
...   return arg + 10
...
>>> new_num = map(func,num)
>>> print new_num

>>>





对于上述例子实质解释如下:

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






四、内置函数filter

filter的作用的是将序列中满足条件的过滤出来然后形成新的序列


1
2
3
4
5
>>> num1 =
>>> tmp = filter(lambda arg:arg >5,num1)
>>> print tmp

>>>




或者

1
2
3
4
>>> tmp2 = filter(lambda n:n >5,num1)   
>>> print tmp2

>>>




或者

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 =
print filter(None,num)
# python lam.py

#
# catlam.py   
#!/usr/bin/env python
# -*- coding:utf8 -*-
num =
print filter(None,num)
# python lam.py

# catlam.py   
#!/usr/bin/env python
# -*- coding:utf8 -*-
num =
print filter(None,num)
# python lam.py





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



五、内置函数reduce

reduce的作用是对序列内的所有元素进行操作




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




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

六、yield生成器

有如下例子:

1
2
3
4
5
>>> print range(8)

>>> 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]
查看完整版本: 三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器