自定义map函数递归执行流程困惑:调试跳转逻辑不解
递归函数执行流程与解包运算符疑问
我正在学习递归(原本误以为是尾递归,实际并非),搞不懂下面示例的执行流程。用VSCode调试器时,程序执行到return [f(arg), *result]这一行时,会跳转到result = my_map(f, rest)行,而且arg变成了2,完全不明白为什么。
代码示例
def my_map(f, iterable): try: arg, *rest = iterable except ValueError: return [] result = my_map(f, rest) return [f(arg), *result] print(my_map(lambda x: x+10, [1,2,3]))
疑问补充
- 我对解包运算符
*不太熟悉,可能因此漏掉了关键信息。当arg为3、result是[]时,我本来以为会返回类似[3, []]的列表,但实际不是这样。 - 我能理解
result变成空列表之前的所有流程,但执行return [f(arg), *result]时,调试器却回到上一行(result赋值那行),希望有人解释这之后的执行过程。
内容的提问来源于stack exchange,提问作者EstherPM
相关产品推荐
相关产品推荐

