reduce竟然有第三个参数
廖雪峰老师的reduce教程里面有三个参数的那个代码。
from functools import reduce
CHAR_TO_FLOAT = {
'0': 0,
'1': 1,
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9,
'.': -1
}
def str2float(s):
nums = map(lambda ch: CHAR_TO_FLOAT[ch], s)##1,2,3,.,4,5,6
point = 0
def to_float(f, n):
nonlocal point
if n == -1:
point = 1
return f
if point == 0:
return f * 10 + n
else:
point = point * 10
return f + n / point
return reduce(to_float, nums, 0.0)
print(str2float('0'))
print(str2float('123.456'))
print(str2float('123.45600'))
print(str2float('0.1234'))
print(str2float('.1234'))
print(str2float('120.0034'))
那么reduce这个是什么意思了。
根据官方文档的意思,reduce有三个参数,第一参数是function,也就是方法,第二个参数是sequence,也就是序列,第三个是initial初始化。
翻译一下上面的内容:这种方法可以实现从左到右使用function累积的方法。最后会得到一个值。。。
如果有第三个参数,会续接在第二个参数的左边,如果没有,不影响第二个参数。