python - 返回列表时函数中的奇怪行为

标签 python

我在网上发现了一个函数,它可以生成一个集合的所有子多重集,然后返回它们。但当我浏览代码以了解其实际用途时,我真的陷入了困境。

代码如下:

def build_substrings(string):
    """ Returns all subsets that can be formed with letters in string. """
    result = []
    if len(string) == 1:
        result.append(string)
    else:
        for substring in build_substrings(string[:-1]):
            result.append(substring)
            substring = substring + string[-1]
            result.append(substring)
        result.append(string[-1])
    return result

现在,假设我用争论“ab”来调用它。基本情况被忽略,所以我进入 else block 并再次调用该函数,现在参数为“a”。我到达基本情况并将“a”附加到结果中。现在我返回结果。 for 循环现在已“激活”。子字符串被分配“a”并将其附加到结果列表中。现在,我已将“a”两次附加到名为“结果”的列表中。不知何故,在输出中它只显示一次。 非常感谢您的帮助。

最佳答案

Now, i have appended "a" two times to the list called 'result.

不,result 是一个局部变量,第一次向其附加“a”时,它是 build_substrings("a") 的局部 result ) 而第二次则是 build_substrings("ab") 的本地结果。它们是对您的方法的两次不同调用,因此它们不会共享其结果

关于python - 返回列表时函数中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216995/

相关文章:

python - Pig Python UDF在MapReduce模式下失败

python - 如何在特定条件下在数据框中插入一行?

python - 使用 htmlparse 替换 html 文件中的图像和 css 源 url(python)

python - 使用numpy在python中矢量化空间距离

python - 检查字符是否等于python中的引号

python - 获取给定当前点、距离和方位的纬度/经度

python - 如何在python中运行并行程序

python - 我有一个争论问题,但我不明白为什么?

python - Virtualenv 不使用全局包

python - 如何计算python中日期之间的差异