filter(function, sequence)
lst = ['1', '2','3', '4']
def func(x): return x if x != '1' else None
ret = filter(func, lst)
print ret
# ['2', '3', '4']
对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回(过滤函数)。
map(function, sequence)
lst = ['1', '2','3', '3']
def func(x): return x + ".map"
ret = map(func, lst)
print ret
# ['1.map', '2.map', '3.map', '3.map']
对sequence中的item依次执行function(item),执行结果组成一个List返回,map也支持多个sequence,这就要求function也支持相应数量的参数输入:
def add(x, y):
return x+y
print map(add, range(10), range(10))
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
reduce(function, sequence, starting_value)
def add(x,y):
return x + y
print reduce(add, range(1, 100))
print reduce(add, range(1, 100), 10) # 加10
# 4950 (注:1+2+...+99)
# 4970 (注:1+2+...+99+20)
对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,如可以用来对List求和
lambda(匿名函数)
func = lambda x: x * 2
print func(2)
print (lambda x: x * 2) (2)
# 4
可以认为,lambda是一个表达式,定义了一个匿名函数,x为入口参数,x*2为函数体,用函数来表示为:
def func(x):
return x * 2
函数组合使用
lst = [1,2,3]
print map(lambda x: x * 2, lst)
# [2, 4, 6]
print [x * 2 for x in lst] # 也可以这样写
print filter(lambda x: x % 2 == 0, lst)
# [2]
print [x for x in lst if x % 2 == 0] # 也可以这样写