#coding=utf-8
'''
Created on 2014-11-12
@author: kite
'''
#�����lambda���ʽ
def myAddFun(x):
return lambda y:x+y
if __name__ == '__main__':
#lambda函数表达式
#格式 lambda 参数1,参数2:表达式
myAdd=lambda x,y:x+y
print(myAdd(3,5)) #8
#调用返回lambda表达式的函数
base=myAddFun(5) #此时base为:lambda y:5+y
print base(7) #执行lambda y:5+y,参数为7,即7+5,返回12
#filter(bool_func,seq)
#此函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列
res=filter(lambda x:x%2==0,range(1,10))
print(res) #[2, 4, 6, 8]
#map(func,seq1[,seq2...]):
#将函数func作用于给定序列的每个元素,并用一个列表来提供返回值;
print(map(lambda x:x*2,[1,2,3,4])) #[2, 4, 6, 8]
print(map(lambda x : x * 2,[1,2,3,4,'abc'])) #[2, 4, 6, 8, 'abcabc'] 数值为乘2,字符串为重复2遍
print(map(lambda x : x * 2,[1,2,3,4,[5,6,7]])) #[2, 4, 6, 8, [5, 6, 7, 5, 6, 7]] 数值为乘2,列表为重复2遍
#如果func为None,func表现为身份函数,返回一个含有每个序列中元素集合的n个元组的列表
print(map(lambda x:None,[1,2,3,4])) #[None, None, None, None]
#reduce(func,seq[,init]):func为二元函数,
#将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值
print(reduce(lambda x,y : x + y,[1,2,3,4])) #10 1+2=3 3+3=6 6+4=10
#如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素
print(reduce(lambda x,y : x + y,[1,2,3,4],10)) #20 1+10=11 11+2=13 13+3=16 16+4