【发布时间】:2020-08-16 23:58:45
【问题描述】:
我有一个 Tree 类,我在其中添加了一个 in_order 递归方法(似乎运行良好)。 因为我想迭代我的 Tree 对象,所以我想我可以实现 next 下的逻辑相同,但是我得到了一个无限生成器循环。
你能告诉我我错过了什么吗?
class Tree:
def __init__(self, left=None, right=None, data=None):
self.data=data
self.right=right
self.left=left
def in_order(self):
if self.left is not None:
yield from self.left.in_order()
yield (self.data)
if self.right is not None:
yield from self.right.in_order()
def __iter__(self):
return self
def __next__(self):
if self.left is not None:
yield from self.left.__next__()
yield(self.data)
if self.right is not None:
yield from self.right.__next__()
t4 = Tree(data=5)
t6 = Tree(data=32)
t5 = Tree(data=10)
t1 = Tree(data=8, left=t4, right=t5)
t2 = Tree(data=35, left=t6)
t3 = Tree(left=t1, right=t2, data=20)
# Works well
gen = (t3.in_order())
for e in gen:
print(e)
# Gets into an infinite loop
for e in t3:
print(e)
【问题讨论】:
-
尝试从您的代码中删除 .__next__():例如
yield from self.left -
从
__next__的逻辑来看,它的内容应该移动到__iter__。你根本不需要定义__next__
标签: python recursion generator binary-search-tree yield