Python 如何返回一个值,但继续执行
我有一个简单的树类,我只需要能够在叶节点上迭代 我将数据添加到我的树中,如下所示:Python 如何返回一个值,但继续执行,python,python-3.x,Python,Python 3.x,我有一个简单的树类,我只需要能够在叶节点上迭代 我将数据添加到我的树中,如下所示: p = ParamTree() p.add('system.screen.timeout') p.add('system.screen.lock.enabled') p.add('system.screen.lock.code') def yield_nodes(tree): for node in tree.nodes: if node.has_children():
p = ParamTree()
p.add('system.screen.timeout')
p.add('system.screen.lock.enabled')
p.add('system.screen.lock.code')
def yield_nodes(tree):
for node in tree.nodes:
if node.has_children():
yield_nodes(node)
else:
yield node
我希望能够依次获得timeout
、enabled
和code
如果我编写一个函数来打印值,它将按预期工作:
def print_nodes(tree):
for node in tree.nodes:
if node.has_children():
print_nodes(node)
else:
print(node)
输出:
>>> print_nodes(p)
timeout
enabled
code
>>> g = yield_nodes(p)
>>> for n in g:
... print(n)
...
>>>
我如何实现一个做同样事情的生成器?我尝试将print()
替换为yield
,但不起作用
def yield_nodes(tree):
for node in tree.nodes:
if node.has_children():
yield_nodes(node)
else:
yield node
输出:
>>> print_nodes(p)
timeout
enabled
code
>>> g = yield_nodes(p)
>>> for n in g:
... print(n)
...
>>>
我假设您的
yield\u节点
生成器编写如下:
p = ParamTree()
p.add('system.screen.timeout')
p.add('system.screen.lock.enabled')
p.add('system.screen.lock.code')
def yield_nodes(tree):
for node in tree.nodes:
if node.has_children():
yield_nodes(node)
else:
yield node
正如您可能注意到的,调用yield\u nodes
将返回一个生成器(您可以对其进行迭代),但实际上您并没有对其进行任何操作。我提议的解决办法如下:
def yield_nodes(tree):
for node in tree.nodes:
if node.has_children():
yield from yield_nodes(node)
else:
yield node