我有一个生成器,我想在其中添加一个初始值和最终值到实际内容中,如下所示:
# any generic queue where i would like to get something from
q = Queue()
def gen( header='something', footer='anything' ):
# initial value header
yield header
for c in count():
# get from the queue
i = q.get()
# if we don't have any more data from the queue, spit out the footer and stop
if i == None:
yield footer
raise StopIteration
else:
yield i
当然,上面的代码不起作用——我的问题是,我希望当队列中没有剩余的东西时,生成器抛出footer
,并提升StopIterator
。有什么想法吗?
干杯
你似乎有点过于复杂了:
当生成器停止屈服时,
StopIteration
将自动引发。这是发电机工作原理的一部分。除非你正在做一些非常复杂的事情,否则你根本不需要(也不应该)处理StopIteration
。只需yield
依次从生成器返回每个值,然后让函数返回。这里有一段代码,其中不需要使用StopIteration,中断就足够了:
结果
现在,这里有一个相当复杂的代码,在我看来,如果不使用StopIteration,我们是做不到的。你对此感兴趣吗?
结果
请注意,此程序仅在
q.get(None)
下正确运行,而不是q.get()
相关问题 更多 >
编程相关推荐