一个python函数的问题

这个函数包含了两个函数。请问一下如果调用str2int函数,首先会略过里面的两个函数,直接从return开始吗?

我想了解一下这个函数执行的步骤,感谢。

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
return reduce(fn, map(char2num, s))

调用str2int函数,会首先定义这两个子函数
然后返回 reduce(fn,map(char2num,s))
也就是首先对s中每个元素执行char2num函数,返回值组成map中的元素,再对map中的元素累计执行fn函数,然后返回结果
如str2(’123’) 以'1','2','3'为参数调用 char2num先返回数字 1,2,3,然后对1,2,3累计执行fn(x,y)
1*10+2=12
12*10+3=123
最后 返回数字123
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-10-30
回答这个问题之前,先看一个函数
def char2num(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
L=list(map(char2num, '63')) # map 是把这个'63'看作是一个list,即['6','3'] 2个元素了,一个一个字节放到 char2num 函数内执行
print(L) #生成的结果是 [6, 3]

L=list(map(char2num, ['6','3']))

print(L) #生成的结果是 [6, 3]

所以,

from functools import reduce
def fn(x, y):
return x * 10 + y
def char2num(s):

digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
L=reduce(fn, map(char2num, '63579')) # 先是调用 map(char2num, '63579'),把'63579'按一个一个字节放到 函数 char2num内,生成一个list[6,3,5,7,9],然后再操作

L=reduce(fn,[6,3,5,7,9])
print(L) #63579
相似回答