1

我看到了一些与此类似的问题,但似乎没有人解决这个具体问题,所以我不知道我是否忽略了某些东西,因为我是 Python 新手。

这是问题的上下文:

for i in range(10):
    if something_happens(i):
        break
if(something_happened_on_last_position()):
    # do something            

从我的 C 背景来看,如果我有一个 for (i=0;i<10;i++) 做同样的事情,如果没有发生中断,那么 i 的值将是 10,而不是 9,和 9如果它发生在最后一个元素上。这意味着方法 something_happened_on_last_position() 可以使用这个事实来区分这两个事件。然而,我在 python 上注意到的是,即使在没有中断的情况下成功运行循环后,我也会在 9 处停止。

虽然两者之间的区别可以像在其中添加一个变量(如标志)一样简单,但我从不喜欢在 C 上使用这种用法。所以我很好奇,是否有另一种选择来做到这一点,或者我在这里错过了什么愚蠢的东西?

请注意,我不能只使用 range(11),因为这会运行 something_happens(10)。这在 C 上是不同的,因为 '10' 在 for 循环的条件下会失败并且永远不会执行 something_happens(10) (因为我们从索引 0 开始,Python 和 C 上的值都是 10)。

我使用这些方法只是为了说明我感兴趣的代码块,它们是一组与解释问题无关的其他条件。

谢谢!

4

2 回答 2

10

它以另一种方式工作:

for i in range(10):
    if something_happens(i):
        break
else: # no break in any position
    do whatever
于 2012-07-11T22:07:27.133 回答
6

这正是该else子句用于for循环的内容:

for i in range(10):
    if something_happens(i):
        break
else:
    # Never hit the break

这个else子句让很多人感到困惑,把它想象成你在循环中执行的所有 if 的 else 。如果从不发生,则该else子句发生。break有关此的更多信息: 对于/其他

于 2012-07-11T22:07:54.593 回答