- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我通过创建一个 Node 对象在 Python 中创建了一棵通用树。每个节点可以有 0、1 或 2 棵树。
我正在尝试创建一种方法来打印树中所有节点的列表。列表不需要按顺序排列。这是我的简单尝试:
def allChildren(self, l = list()):
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l
我第一次运行这个方法时,它工作正常。但是,出于某种原因,它正在存储以前的运行。第二次运行该方法时,它会打印所有节点两次。即使我创建了 2 棵独立的树,它仍然会记住之前的运行。例如:我创建了 2 棵树,a 和 b。如果我运行 a.allChildren() 我会收到正确的结果。然后我运行 b.allChildren() 并接收 a 的所有节点和 b 的所有节点。
最佳答案
您有一个可变值作为函数参数 l
的默认值。在 Python 中,这意味着当您调用 l.append(self)
时,您将永久修改默认参数。
为了避免这个问题,每次调用函数时都将l
设置为一个新的list,如果没有传入list:
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
这种现象在 this question 中得到了更彻底的解释。 .
关于Python:打印树的所有节点无意中存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930980/
这个问题已经有答案了: Why do I get "AttributeError: NoneType object has no attribute" using Tkinter? Where did
我有一个列表,我想从中删除没有出现在另一个列表中的项目。我试过以下方法: for w in common: for i in range(1,n): if no
我遇到了一些自定义管理页面触发 Django 管理站点而不是显示我的自定义页面的问题。 我的 urls.py 如下: urlpatterns = patterns('', # ... trim
我尝试使用 href 方法下载 CSV 文件,但是将其设置为 href 标记时数据似乎被 chop 。对于 IE,我使用了 msSaveBlob,它似乎工作正常并且所有数据都已正确下载。
我是一名优秀的程序员,十分优秀!