请教一个 Python 递归中的默认参数问题

2018-03-20 14:40:36 +08:00
 s3040608090

想写一个递归,能够“融化”一个 list。比如[1,[2,3]]变成[1,2,3]。 完成代码如下:

def list_melt(lst, new_lst=[]):
    for element in lst:
        if not isinstance(element, (tuple,list)):
            new_lst.append(element)
        else:
            list_melt(element, new_lst)
    return new_lst

测试结果是,第一次使用这个函数可以得到想要的结果,但第二次开始结果会被叠加,也就是默认的 new_lst 参数会跟在上一次测试的结果后面。 比如说,第一次传入[1,[2,3]]变成[1,2,3],第二次传入[[4,5],6]会变成[1,2,3,4,5,6]。请问为什么默认参数会失效?谢谢。

1730 次点击
所在节点    Python
2 条回复
conn4575
2018-03-20 15:18:05 +08:00
python 里面的经典误区之一,默认参数不能是可变类型,因为默认参数只在函数定义时注册一次。具体可以问谷歌
s3040608090
2018-03-20 15:24:51 +08:00
@conn4575 解释得很清楚了,非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX