filter、map、reduce、lambda

filter

过滤器filter(),调用方式filter(function,sequence),其中function是某个函数的函数名,sequence为一个序列(List/String/Tuple)
filter将sequence中的元素依次作为函数function的参数执行,并返回执行结果为True的元素,放在一个容器里
python2根据sequence(List/String/Tuple)的类型决定返回的数据类型(List/String/Tuple),而python3直接做成了一个迭代器

 1 s = 'Nathaniel'# 定义一个序列
 2 def func1(x):# 随便定义一个函数
 3     if x != 'a':
 4         x = 1
 5         return x
 6 
 7 print(list(filter(func1,s)))
 8 
 9 print('*'*25,'假装是分割线','*'*25)
10 # 如果随便定义的函数没有返回值呢?
11 def func1(x):# 随便定义一个函数
12     if x != 'a':
13         x = 1
14         # return x
15 
16 print(list(filter(func1,s)))
17 
18 print('*'*25,'假装是分割线','*'*25)
19 # 如果随便定义的函数一定有返回值呢?
20 def func1(x):# 随便定义一个函数
21     if x != 'a':
22         x = 1
23     return x
24 
25 print(list(filter(func1,s)))
26 
27 # 明白了吗,filter将sequence中的元素依次作为函数function的参数执行,并返回执行结果为True的元素
28 # 还不明白我就没办法了
29 
30 
31 print('*'*25,'假装是分割线','*'*25)

map

map(function, sequence),同样将sequence中的元素依次作为参数传入function执行,不同的是将执行结果而非参数返回

 1 def add(num):
 2     return str(num) + '后缀'
 3 
 4 print(list(map(add,s)))
 5 
 6 print('*'*25,'假装是分割线','*'*25)
 7 # map支持多个sequence
 8 def add(num1,num2):
 9     return str(num1) + str(num2)
10 
11 print(list(map(add,s,'Nathaniel')))
12 print('*'*25,'假装是分割线2','*'*25)

reduce

reduce(function, sequence, starting_value),将sequence中的第一第二个元素传入function执行(要求function接收2个参数),再将function执行的结果
和sequence的第三个元素作为参数传入function执行,得到一个返回值和sequence的第四个元素作为参数传入function执行......以此类推
可以不对starting_value传参,如果传入,则作为初始值

 1 def add(num1,num2):
 2     return str(num1) + str(num2)
 3 
 4 # 在Python3里,reduce()函数已经从全局变量中移除了,使用的话要先导入functools模块
 5 from functools import reduce
 6 print(reduce(add,s))
 7 print(reduce(add,range(10)))
 8 
 9 print('*'*25,'假装是分割线a','*'*25)
10 def add(num1,num2):
11     return num1 + num2
12 print(reduce(add,range(10),10))# 对starting_value传参

lambda

lambda可以帮你快速定义一个最小单行函数,通常在你需要一个函数但又不想费心去起一个名字时使用,毕竟想一个优雅美丽的函数名是一件很消耗CPU的事情

1 print((lambda x:x*2)(5))

 

 

可以将lambda和filter、map、reduce放在一起使用

posted @ 2017-10-30 19:00  Nathaniel-J  阅读(174)  评论(0编辑  收藏  举报