Python lambda/map/reduce理解

# -*- coding: utf-8 -*-
# vim: expandtab softtabstop=4 shiftwidth=4
'''
map/reduce/lambda/三个函数的理解
'''


from functools import reduce


def char2num(c):
    ''' 字母转数字 '''
    return({
        '0': 0,
        '1': 1,
        '2': 2,
        '3': 3,
        '4': 4,
        '5': 5,
        '6': 6,
        '7': 7,
        '8': 8,
        '0': 0,
    }[c])

def num2char(n):
    ''' 单个数字转字符 '''
    return({
        0: '0' ,
        1: '1' ,
        2: '2' ,
        3: '3' ,
        4: '4' ,
        5: '5' ,
        6: '6' ,
        7: '7' ,
        8: '8' ,
        0: '0' ,
    }[n])

def str2num(s):
    ''' 字符串转数字 reduce ×10 map生成数字 '''
    return(reduce(lambda x,y: x*10 + y, map(char2num, s)))

def num2str(n):
    ''' 数字转字符串  取余数add进list,
    取整循环到上一位, list -1 反序,
    map找到对应char, reduce连接成字符串'''
    L = []
    while n > 0:
        L.append(n % 10)
        n = n // 10
    return(reduce(lambda x,y: x+y, map(num2char, L[::-1])))

def int2dec(n):
    ''' 整数转为0. 开头的小数'''
    # 这里的问题是整数没有len需要把数字转为字符求len,再除 10的阶乘
    return(n/10**len(num2str(n)))

def str2float(s):
    ''' 字符串转浮点数 '''
    # 这里的逻辑是把字符串按“.”分成两段,xy正常都转为正整数,y变为0.开头小数,然后相加。
    return(reduce(lambda x,y: x+int2dec(y), map(str2num, s.split('.'))))


###  Test
#print(char2num('0'))
#print(str2num('111'))
#print(num2str(1))
#print(int2dec(123))
print(str2float('123.123'))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值