end*_*x1x 1 python tree class python-3.x
我通过创建一个 Node 对象在 python 中创建了一个通用树。每个节点可以有 0、1 或 2 棵树。
我正在尝试创建一种方法来打印树中所有节点的列表。该列表不需要按顺序排列。这是我的简单尝试:
def allChildren(self, l = list()):
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l
Run Code Online (Sandbox Code Playgroud)
我第一次运行这个方法时,它工作正常。但是,出于某种原因,它正在存储以前的运行。我第二次运行该方法时,它会打印所有节点两次。即使我创建了 2 个独立的树,它仍然记得之前的运行。例如:我创建了 2 棵树,a 和 b。如果我运行 a.allChildren() 我会收到正确的结果。然后我运行 b.allChildren() 并接收 a 的所有节点和 b 的所有节点。
您有一个可变值作为函数参数的默认值l
。在 Python 中,这意味着当您调用 时l.append(self)
,您将永久修改默认参数。
为了避免这个问题,l
每次调用函数时都设置一个新的列表,如果没有传入列表:
def allChildren(self, l = None):
if l is None:
l = list()
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
781 次 |
最近记录: |