高阶函数
map/reduce
map()函数接收两个 参数,一个是函数,一个是iterable,map将 传入的函数依次作用到序列的每个元素,并把结果作为新的iterator返回。
例:
def f(x):
return x * x
r = map(f, [1, 2, 3, 4])
for x in r:
print(x)
map()传入的第一个参数 是f,即函数对象本身。由于结果 r是一个iterator迭代器,iterator 是惰性 序列 ,因此通过list()函数让它把整个序列都计算出来并返回一个list。
把list所有数字转换为字符串list(map(str,[1, 2, 3, 4, 5]))
reduce是把一个函数作用在一个序列上 ,这个函数接受两个 参数,reduce把结果 和序列 的 下一个元素做累积计算,其效果就是
reduce(f, [x1, x2, x3, x4]) = f( f( f(x1, x2), x3), x4)
序列求和,就可以用reduce实现,也可以 用 sum()
from functools import reduce
def add(x, y):
return x + y
r = reduce(add, [1, 3, 5, 7, 9])
print(r)
把字符串转换 成 int 的函数
def char2num(s):
digits = {
'0':0, '1':1, '2':2, '3':3, '4':4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
x = reduce(fn, map(char2num, '1283'))
print(x)
map先一一对应得到 整数,随后reduce把数字链接起来。
整理一下
digits = {
'0':0, '1':1, '2':2, '3':3, '4':4,