Python 仅在 for 循环未开始迭代(使用生成器)时才执行代码?

标签 python python-2.7 generator

else block 在 for/else如果迭代完成但未被 break 中断,则执行子句, so I read .

有没有一种语言结构可以让我写一些只有在 for 时才执行的东西?循环没有开始迭代?如果我使用 tuplelist ,我会做这样的事情:

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环形?我可以使用 next()while循环并 try catch StopIteration , 但我想看看是否有一个很好的方法来使用 for .

最佳答案

n = -1
for n, i in enumerate(it):
    do_stuff()
if n < 0:
    print 'Done'

关于Python 仅在 for 循环未开始迭代(使用生成器)时才执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18112036/

相关文章:

python - 有时我想要一个发电机

python - Tornado的 "yield"和asyncio的 "yield from"在机制上的区别?

python - Pycharm 的自动完成功能无法正常工作

python - 如何创建一个监听文件描述符的 Python 套接字服务器?

python - Python 的 raw_input() 容易受到缓冲区溢出的影响吗?

python-3.x - 从生成器创建 numpy 数组,列表列表

python - 使用 Python 从 wav 文件创建振幅列表

python 如何有效地将术语组合在一起

python-2.7 - 如何绘制多类分类器中是否发生过拟合

python - 运行时错误 : cuda runtime error (30) : unknown error at torch/csrc/cuda/Module. cpp:32