首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归后的python3保存数据

递归后的python3保存数据
EN

Stack Overflow用户
提问于 2022-01-13 15:29:36
回答 1查看 21关注 0票数 0

我编写了一些代码,通过将作为列表一部分的数字相加,找到了获取数字之和最快的方法: bestSum( 3,800,1,3)将返回3,因为这将是获得3(第一个数字)的最佳方法,提供的数字将是简单地添加3。

代码语言:javascript
复制
def bestSum(target, lst, mochi = {}):
    if target in mochi:
        return mochi[target]

    if target == 0:
        return []
    if target < 0:
        return None

    shortestCombination = None

    for i in lst:
        remainderCombination = bestSum(target - i, lst, mochi)
        if remainderCombination is not None:
        remainderCombination = [*remainderCombination, i]
            if shortestCombination is None or len(remainderCombination) < len(shortestCombination):
                shortestCombination = remainderCombination

    mochi[target] = shortestCombination

    return shortestCombination

我遇到了这样的问题,在运行代码期间,数据将被保存,例如,如果我只运行

代码语言:javascript
复制
print(bestSum(8, [4])

它回来了

代码语言:javascript
复制
[4, 4]

但是如果我跑了

代码语言:javascript
复制
print(bestSum(8, [2, 3, 5]))
print(bestSum(8, [4]))

它返回:

代码语言:javascript
复制
[5, 3]
[5, 3]

我在这里做错什么了吗?这是一个潜在的安全漏洞吗?有什么方法可以正确地返回吗?什么会导致蟒蛇做这样的事情呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 15:38:06

当使用可变项作为默认参数时,这是有记录的行为 (参见“在执行函数定义时从左到右计算默认参数值”)。

正如文档中所讨论的那样,“解决这个问题的一种方法是使用None作为默认值,并在函数的主体中显式地测试它”。

[虽然有文档记载,但我几天前才了解到在这里所以 ]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70699085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档