1. Map
map函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数一次作用到序列的每个元素,并把结果作为新的Iterator返回。

r = map(str, [1,2,3,4,5])
print(list(r))
#['1', '2', '3', '4', '5']
map返回的是一个Iterator,Iterator是惰性序列,因此需要list()函数都计算出来并返回一个list。
2. reduce()
reduce同样接受两个参数,但是它会把结果继续和序列的下一个元素做累积计算
from functools import reduce
def fn(x, y):
return x * 10 + y
def char2num(s):
return{'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}[s]
reduce(fn, map(char2num, '12345'))
3. filter()
filter()同样接受一个函数和一个序列,它把传入的函数依次作用于每个元素,然后根据返回的bool值,决定是否保留该元素
#筛选素数
def _odd_iter():
n = 1
while True:
n = n + 2
yield n
def _not_divisible(n):
return lambda x : x % n > 0
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it)
yield n
it = filter(_not_divisible(n), it)
for n in primes():
if n < 1000:
print(n)
else:
break
网友评论