几个特殊的函数(待补充)
python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter、map、reduce、lambda、yield
lambda
1
2
3
4
5
|
>>> g = lambda x,y:x + y #x+y,并返回结果
>>> g( 3 , 4 )
7
>>> ( lambda x:x * * 2 )( 4 ) #返回4的平方
16
|
lambda函数的使用方法:
在lambda后面直接跟变量
变量后面是冒号
冒号后面是表达式,表达式计算结果就是本函数的返回值
冒号后面是表达式,表达式计算结果就是本函数的返回值
比如,要打印一个list,里面依次是某个数字的1次方,二次方,三次方,四次方。用lambda可以这样做:
1
2
3
4
5
|
>>> lamb = [ lambda x:x, lambda x:x * * 2 , lambda x:x * * 3 , lambda x:x * * 4 ]
>>> for i in lamb:
... print i( 3 ),
...
3 9 27 81
|
map
map()是python的一个内置函数,它的基本样式是:
map(func,seq)
func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并放入
到func那个函数里面,并将func的返回值依次存到一个list中。如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
>>> items = [ 1 , 2 , 3 , 4 , 5 ]
>>> squared = []
>>> for i in items:
... squared.append(i * * 2 )
...
>>> squared
[ 1 , 4 , 9 , 16 , 25 ]
>>> def sqr(x): return x * * 2
...
>>> map (sqr,items)
[ 1 , 4 , 9 , 16 , 25 ]
>>> map ( lambda x: x * * 2 , items)
[ 1 , 4 , 9 , 16 , 25 ]
>>> [ x * * 2 for x in items ] #这个我最喜欢了,一般情况下速度足够快,而且可读性强
[ 1 , 4 , 9 , 16 , 25 ]
|
要点:
对iterable中的每个元素,依次应用function的方法(本质上就是一个for循环)
将所有结果返回一个list
如果参数很多,则对那些参数并行执行function
继续下面两个例子:
1
2
3
4
|
>>> lst1 = [ 1 , 2 , 3 , 4 , 5 ]
>>> lst2 = [ 6 , 7 , 8 , 9 , 0 ]
>>> map ( lambda x,y: x + y, lst1,lst2) #将两个列表中的对应项加起来,并返回一个结果列表
[ 7 , 9 , 11 , 13 , 5 ]
|
1
2
3
4
5
|
>>> lst1 = [ 1 , 2 , 3 , 4 , 5 ]
>>> lst2 = [ 6 , 7 , 8 , 9 , 0 ]
>>> lst3 = [ 7 , 8 , 9 , 2 , 1 ]
>>> map ( lambda x,y,z: x + y + z, lst1,lst2,lst3)
[ 14 , 17 , 20 , 15 , 6 ]
|
可以看到map函数的强大和简洁。如果使用for循环将会很繁琐
reduce
直接看例子:
1
2
|
>>> reduce ( lambda x,y: x + y,[ 1 , 2 , 3 , 4 , 5 ])
15
|
reduce函数的计算方式是将列表中的元素累加,((((1+2)+3)+4)+5)=15 与map函数相比较就可以看出两者之间的区别。map是上下运算,reduce是横着逐个元素进行运算。
reduce含可以接受第三个值作为初始值:例如
1
2
|
>>> reduce ( lambda x,y: x + y,[ 1 , 2 , 3 , 4 , 5 ], 100 )
115
|
上述列表中计算将以100为初始值执行累加计算,先计算 100+1
filter
filter的中文含义是“过滤器”,在python中,它就是起到了过滤器的作用.
通过下面代码体会:
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> numbers = range ( - 5 , 5 )
>>> numbers
[ - 5 , - 4 , - 3 , - 2 , - 1 , 0 , 1 , 2 , 3 , 4 ]
>>> filter ( lambda x: x> 0 , numbers)
[ 1 , 2 , 3 , 4 ]
>>> [x for x in numbers if x> 0 ] #与上面那句等效
[ 1 , 2 , 3 , 4 ]
>>> filter ( lambda x: x > 3 , [ 1 , 2 , 3 , 4 , 5 ])
[ 4 , 5 ]
|
拜读下filter的官方文档解释:
1
2
3
4
5
6
|
filter (...)
filter (function or None , sequence) - > list , tuple , or string
Return those items of sequence for which function(item) is true. If
function is None , return the items that are true. If sequence is a tuple
or string, return the same type , else return a list .
|
总结
以上就是本文关于简单了解Python中的几种函数的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的。
原文链接:http://www.cnblogs.com/pingqiang/p/7774980.html