map
map(function, sequence)
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator
返回。
map()
作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) ['1', '2', '3', '4', '5', '6', '7', '8', '9']
filter
filter(function, sequence)
Python内建的filter()
函数用于过滤序列。
和map()
类似,filter()
也接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后根据返回值是True
还是False
决定保留还是丢弃该元素。
def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 结果: [1, 5, 9, 15]
与map的不同
1 # map 2 3 def f(x): 4 return x * x 5 6 r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) 7 print(list(r)) 8 9 # 结果 10 #[1, 4, 9, 16, 25, 36, 49, 64, 81] 11 12 # filter 13 14 def f(x): 15 return x * x 16 17 r = filter(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) 18 print(list(r)) 19 20 #结果 21 #[1, 2, 3, 4, 5, 6, 7, 8, 9]
reduce
reduce(function, sequence, starting_value)
reduce()把一个函数作用在一个序列[x1, x2, x3,...]上,这个函数必须接受两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
reduce使用前需要先声明
from functools import reduce
对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.
1 from functools import reduce 2 3 def add1(x,y): 4 return x + y 5 6 print (reduce(add1, range(1, 101)))## 4950 (注:1+2+...+99) 7 8 print (reduce(add1, range(1, 101), 20))## 4970 (注:1+2+...+99+20)
lambda
匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。
因为lamdba在创建时不需要命名,所以,叫匿名函数
匿名函数lambda x: x * x
实际上就是:
def f(x): return x * x
a = lamdba x: x * x,a是一个函数名
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数
1 #普通函数 2 def add(a,b): 3 return a + b 4 5 print add(2,3) 6 7 8 #匿名函数 9 add = lambda a,b : a + b 10 print add(2,3) 11 12 13 #========输出=========== 14 5 15 5