我通过创建一个节点对象,在python中创建了一个通用树。每个节点可以有0、1或2棵树。在
我正在尝试创建一个方法来打印树中所有节点的列表。名单不必按顺序排列。以下是我的简单尝试:
def allChildren(self, l = list()):
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l
我第一次运行这个方法时,它是正确的。但是,由于某些原因,它正在存储以前的运行。第二次运行该方法时,它会打印所有节点两次。即使我创建了两个独立的树,它仍然记得以前的运行。E、 g:我创建了两个树,a和b。如果我运行a.allChildren(),我会得到正确的结果。然后我运行b.allChildren()并接收a的所有节点和b的所有节点。在
如果您正在编写默认参数,如l=list(),它将在编译函数时创建list,因此它将为所有函数调用提供一个list实例。要防止出现这种情况,请使用“无”并在函数内创建新列表:
试试这个:
请查看this answer进行解释。在
您有一个可变值作为函数参数
l
的默认值。在Python中,这意味着当您调用l.append(self)
时,您正在永久地修改默认参数。在为了避免此问题,请在每次调用函数时将
l
设置为一个新列表,如果没有传入列表:这一现象在this question中有更详细的解释。在
相关问题 更多 >
编程相关推荐