"其他"与"而"和神秘的"打破"

时间:2016-02-04 11:07:16

标签: python while-loop break

我正在经历this。来自C环境,它让我彻底惊讶和难以置信。然后,我为自己尝试了::

bCondition = True
while bCondition:
  print("Inside while\n")
  bCondition = False
else:
  print("Inside else\n")
print("done\n")

此代码呈现以下输出

#Output
Inside while
Inside else
done

Ideone link

现在,我的问题是,为什么?我们为什么需要这个?为什么两个块都被执行? Isn&#t; t ifelse是相互制作的,然后用什么用例会使这个设计成为一个有用的设计来实现?

再次,如果我们只是将代码更改为合并break,则行为更加神秘。 Ideone Link

bCondition = True
while bCondition:
  break
else:
  print("Inside else\n")
print("done\n")

此代码呈现以下输出

#Output
done

为什么跳过两个块? Isn&#t; t break只是为了摆脱循环,那为什么它会突破else块?

我也经历了documentation,但我无法理清我的怀疑。

1 个答案:

答案 0 :(得分:4)

在python循环之后使用 else 子句来检查某个对象是否满足某些给定条件。

如果你正在实现搜索循环,那么如果使用 break 之类的结构突然终止循环,则在循环结束时执行else子句,因为假设如果 break 用于满足搜索条件。

因此,当您使用 break 时,不会评估 else 子句。但是当你在 条件评估为false之后自然退出循环时,将评估else子句,因为在这种情况下假设没有对象符合你的搜索条件。

for x in data:
    if meets_condition(x):
        print "found %s" % x
        break
else:
    print "not found"
    # raise error or do additional processing