把“数字的字符串”转换成“整数”时遇到的小麻烦

from functools import reduce

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    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]
    return reduce(fn, map(char2num, s))

我尝试在cmd的python交互模式下调出{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]的返回值都失败了

尝试1:
s='13579'
{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
提示:KeyError:'13579'

尝试2:
{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}['13579']
依然提示:KeyError:'13579'

而程序整体的运行确实十分正确顺利,原因就在于对于map()函数的理解不够深入:map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
所以‘13579’在map函数下其实是按生成器一个字符一个字符的进行运算的,所以并不会报错。而直接像楼主那样的“尝试1”,“尝试2”会爆错也就不奇怪了,{}中并没有‘13579’这样的键。

原文地址:https://www.cnblogs.com/cccmon/p/7898734.html