几个特殊的函数(待补充)
python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数:
filter、map、reduce、lambda、yieldlambda
>>> g = lambda x,y:x+y #x+y,并返回结果>>> g(3,4)7>>> (lambda x:x**2)(4) #返回4的平方16
lambda函数的使用方法:
- 在lambda后面直接跟变量
- 变量后面是冒号
- 冒号后面是表达式,表达式计算结果就是本函数的返回值
冒号后面是表达式,表达式计算结果就是本函数的返回值
比如,要打印一个list,里面依次是某个数字的1次方,二次方,三次方,四次方。用lambda可以这样做:
>>> 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中。如
>>> 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
继续下面两个例子:
>>> 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]
>>> 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
直接看例子:
>>> reduce(lambda x,y: x+y,[1,2,3,4,5])15
reduce函数的计算方式是将列表中的元素累加,((((1+2)+3)+4)+5)=15
与map函数相比较就可以看出两者之间的区别。map是上下运算,reduce是横着逐个元素进行运算。reduce含可以接受第三个值作为初始值:例如
>>> reduce(lambda x,y: x+y,[1,2,3,4,5],100)115
上述列表中计算将以100为初始值执行累加计算,先计算 100+1
filter
filter的中文含义是“过滤器”,在python中,它就是起到了过滤器的作用.
通过下面代码体会:
>>> 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的官方文档解释:
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.