我正在经历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
现在,我的问题是,为什么?我们为什么需要这个?为什么两个块都被执行? Isn&#t; t if
和else
是相互制作的,然后用什么用例会使这个设计成为一个有用的设计来实现?
再次,如果我们只是将代码更改为合并break
,则行为更加神秘。 Ideone Link
bCondition = True
while bCondition:
break
else:
print("Inside else\n")
print("done\n")
此代码呈现以下输出
#Output
done
为什么跳过两个块? Isn&#t; t break
只是为了摆脱循环,那为什么它会突破else
块?
我也经历了documentation,但我无法理清我的怀疑。
答案 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