from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def char2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s)) #S字符串是iterable对象
print(str2int('128'))
print:
128
lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y
lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1
Reduce:函数对iterable当前与下一位做累积计算
reduce把结果继续和序列的下一个元素做累积计算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4
reduce一次最多接受两个参数计算
a = [1,2,3]
b = [2,3,4]
c = [3,4,5]
def fn(x,y,z):
return x+y+z
q = reduce(fn, a, b, c) # TypeError: reduce expected at most 3 arguments, got 4
Map:函数对iterable每一个单独作用,返回新的iterator
Python内建了map()和reduce()函数。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。