【发布时间】:2013-08-09 08:09:51
【问题描述】:
for/else 子句中的else 块在迭代完成但未被break、so I read 中断时执行。
是否有一种语言结构可以让我编写仅在for 循环没有开始迭代时才执行的东西?如果我使用的是tuple 或list,我会这样做:
if seq:
for x in seq:
# something
else:
# something else
但是当我使用生成器时,我没有得到我想要的行为:
>>> g = (x for x in range(2))
>>> for x in g:
... print x
... else:
... print "done"
...
0
1
done # I don't want "done" here
>>> g = (x for x in range(2) if x > 1)
>>> if g:
... for x in g:
... print x
... else:
... print "done"
...
>>> # I was expecting "done" here
我怎样才能做到这一点,而不用从生成器创建tuple 或list,同时还使用for 循环?我可以在while 循环中使用next() 并尝试捕获StopIteration,但我想看看是否有一个很好的方法来使用for。
【问题讨论】:
-
我可能会在循环内设置一个
ran标志并使用if not ran:。 -
@Ludo 我知道我不知道生成器一开始是否为空。我只是想知道是否有一个很好的语言结构来处理这种情况。
标签: python python-2.7 generator