所以我有一个辅助函数,它应该打印出二进制树的内部节点和叶子(未排序)。我不会提供代码,因为我在课堂上,但我可以告诉你我已经编码了它,它适用于我投入的第一个节点:
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的情况下针对不同情况测试我的函数。我该如何解决这个问题?
答案 0 :(得分:2)
当遇到函数定义时,即在Python看到def
行时,会计算的默认参数。然后它们绑定到函数本身。
使用可变的默认参数,绑定到函数的默认参数可能会更改,这会导致一些相当令人惊讶的结果。
通常的建议:使用None
作为默认值,并根据需要创建实际默认值:
def foo(bar=None):
if bar is None:
bar = []
...