如何提前结束循环一次迭代?

How to end loop one iteration earlier?

我经常需要提前结束循环一次,如何优雅地完成? Breaking out of nested loops 在我看来很乱。 现在我用 return 解决它,但稍后我想做一个 class,在构造函数中间有 return 就失去意义了。

def forward(neurons):
for layerId, layer in enumerate(neurons):
    if layerId == neurons.__len__() - 1:
        return
    for idx, i in enumerate(neurons[layerId]):
        for idx2, n in enumerate(neurons[layerId+1]):
            neurons[layerId+1][idx2] += i * sigmoid(weights[layerId][idx][idx2])

您也可以只使用 break:

for i in range(1,100):
  if i==10:
    break

这将在条件匹配时终止循环。

一个通用的解决方案是从迭代器创建一个生成器(它将生成迭代器生成的最后一个元素以外的所有元素):

def but_last(p):
    first = True
    for x in p:
        if not first:
            yield last
        first = False
        last = x

for layerId, layer in but_last(enumerate(neurons)):
    do_your_stuff(layerId, layer)

我建议您将神经元对象实现为 class 方法 __iter__ 以使对象可根据您喜欢的行为进行迭代:

class MyClass(object):
    def __iter__(self):
        yield 2
        yield 5
        yield 10


obj = MyClass()

for i in obj:
    print i