为了账号安全,请及时绑定邮箱和手机立即绑定

有没有知道怎么解释这段代码的 有点摸不着头脑

from functools import reduce
def str2float(s):
    def char2num(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    if '.' in s:
        L=s.split('.')
        left_part=reduce(lambda x,y:x*10+y,map(char2num,L[0]))
        # 123.456
        right_part=reduce(lambda x,y:x/10+y,map(char2num,L[1][::-1]))/10
        return left_part + right_part
    else:
        return reduce(lambda x,y:x*10+y,map(char2num,s))

print('str2float(\'123.456\') =', str2float('123.456'))

有没有大神可以给点注释,很多地方都看不太明白

正在回答

3 回答

from functools import reduce      # Python3需要导入包

def str2float(s):   # 定义一个接收变量s的函数

    def char2num(s):  

        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]    # 根据传入的变量s的值,返回对应的字典中的值

    if '.' in s:

        L=s.split('.')          # 对s根据“."  切片

        left_part=reduce(lambda x,y:x*10+y,map(char2num,L[0]))     # reduce接收“函数”return x*10+y,并对列表【1,2.3】进行计算

        # 123.456

        right_part=reduce(lambda x,y:x/10+y,map(char2num,L[1][::-1]))/10   # reduce接收“函数”return x/10+y,并对列表【4,5,6】进行计算

        return left_part + right_part    # 返回两个值得和

    else:

        return reduce(lambda x,y:x*10+y,map(char2num,s))  如果传入的字符串没有“.”,那么# reduce接收“函数”return x*10+y,并对列表【s】进行计算

 

print('str2float(\'123.456\') =', str2float('123.456'))    # 输出

#  其实这个逻辑基本没有,主要是对方法函数的调用,你只要明白这个函数是做什么的就行了


3 回复 有任何疑惑可以回复我~
#1

精慕门8185332 提问者

非常感谢! meme哒!!
2017-08-01 回复 有任何疑惑可以回复我~
#2

qq_慕圣1034960

没看懂啥意思
2019-04-16 回复 有任何疑惑可以回复我~

你这个是要干啥的,没看懂。

0 回复 有任何疑惑可以回复我~

有没有大神来点注释

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

有没有知道怎么解释这段代码的 有点摸不着头脑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信