python - 如何在 Python 中返回可迭代对象?
问题描述
我有一棵树。我有几项涉及扫描整棵树的任务。
我想编写一个函数,scanTree ()
例如以特定顺序扫描一棵树,然后返回一个可迭代对象。
这个想法是:
def task1 (self):
x = self.scanTree ()
for y in x:
do_something1(y)
def task2 (self):
x = self.scanTree ()
for y in x:
do_something2(y)
但我不知道我可以在 function 中返回什么样的对象scanTree
。
你能给我一些提示吗?
非常感谢,
解决方案
这看起来像是generators的工作。假设您的 btree 类如下所示:
class BTree:
def __init__(self, value, left=None, right=None):
self._value = value
self._left = left
self._right = right
然后,您可以编写一个scanTree()
这样的按顺序遍历:
def scanTree(self):
'''
Traverse the binary tree in-order
'''
if self._left is not None:
yield from self._left.scanTree()
yield self._value
if self._right is not None:
yield from self._right.scanTree()
然后你像这样使用它:
>>> l = BTree(1)
>>> r = BTree(3)
>>> t = BTree(2, l, r)
>>> it = t.scanTree()
>>> it
<generator object BTree.scanTree at 0x7fc20602a728>
>>> list(it)
[1, 2, 3]
这里涉及到一堆概念来深入理解这一点,但基本思想非常直观:您编写相同的循环,就好像您打算按照您想要的顺序打印元素一样,除了您使用yield
而不是打印,并且yield from
随时你递归。