首页 > 解决方案 > 函数参数范围

问题描述

我是 Python 新手。我无法理解以下代码的结果。为什么第二个调用返回值包含第一个?

def first(l_list):
    return l_list[:1][0]

def rest(l_list):
    return l_list[1:]

def map(f, src_list, dst_list=[]):
    if src_list:
        dst_list.append(f(first(src_list)))
        map(f, rest(src_list), dst_list)
    return dst_list

def inc(num):
    return num + 1

def pow(num):
    return num**2

mylist = list(range(10))

print(map(inc, mylist))
print(map(pow, mylist))

结果是

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

我期待以下结果

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

谢谢你的帮助!

更新

我修改了“地图”功能,它现在按预期工作。

def map(f, src_list, dst_list=None):
    if dst_list is None:
        dst_list = []
    if src_list:
        dst_list.append(f(first(src_list)))
        map(f, rest(src_list), dst_list)
    return dst_list

标签: pythonpython-3.x

解决方案


推荐阅读