0

所以我有一个辅助函数,它应该打印出二叉树的内部节点和叶子(未排序)。因为我在上课,所以我不会提供代码,但我可以告诉你,我已经编写了代码,它适用于我投入其中的第一个节点:

def helper(root, internals=[], leaves=[]):
    #function code here...
>>> helper(node)
    ([13, 14, 27], [10, 11, 12, 17, 19])

据我所知,这是正确的输出。但是,当我在另一个节点上再次调用相同的函数时,输出将被覆盖为前一个:

>>> helper(pen)
    ([13, 14, 27, 6, 8, 14], [10, 11, 12, 17, 19, 2, 4, 10, 12])

这是不正确的,因为树pen没有元素 13、14、27 或 10、11、12、17、19。有人可以解释这里发生了什么吗?我必须针对不同的情况测试我的功能,而无需每次都重新启动 shell。我该如何解决?

4

1 回答 1

7

当遇到函数定义时,即 Python 看到该行时,会评估默认参数def。然后它们被绑定到函数本身。

使用可变默认参数,绑定到函数的默认参数可能会更改,这会导致一些相当令人惊讶的结果。

通常的建议:None用作默认值,并根据需要创建实际的默认值:

def foo(bar=None):
    if bar is None:
        bar = []
    ...
于 2013-03-08T00:28:02.990 回答