Discuss / Python / 3题
def str2float(s):
    a = 0
    k = 0
    s_left = None
    s_right = None
    def f_left(x , y):
        return x * 10 + y


    def f_right(x , y):
        nonlocal a
        a += 1
        return x + y * (0.1 ** a)

    for i in s:
        if i == '.':
            s_left = s[:k]
            s_right = s[k + 1:]
            break
        k += 1
    return reduce(f_left, map(int, s_left)) + reduce(f_right, map(int, s_right)) * 0.1
map()

可以理解为映射,接收两个参数,第一个是函数,第二个是可迭代对象iterable,iterable每个元素应用一次函数后,再组成一个新的惰性序列迭代器iterator并返回

reduce()

可以理解为叠加,接收两个参数,第一个是有两个参数的函数,第二个是一个序列,并且把每一个元素应用函数后得出的值再和下一个元素一起传入函数,最后返回一个值,从包含无数元素的序列到只剩下一个元素,理解为叠加

如果序列里的元素不是整数或者浮点数的话,函数用math类会报错


  • 1

Reply