“else” with “while” and mysterious “break”
本问题已经有最佳答案,请猛点这里访问。
我正在经历这个。 来自C环境,它让我彻底惊讶和难以置信。 然后,我为自己尝试了::
1 2 3 4 5 6 7 8 9 10 | bCondition = True while bCondition: print("Inside while ") bCondition = False else: print("Inside else ") print("done ") |
此代码呈现以下输出,
1 2 3 4 | #Output Inside while Inside else done |
Ideone链接
现在,我的问题是,为什么? 我们为什么需要这个? 为什么两个块都被执行? 是不是
再次,如果我们只是将代码更改为包含
1 2 3 4 5 6 7 8 | bCondition = True while bCondition: break else: print("Inside else ") print("done ") |
此代码呈现以下输出,
1 2 | #Output done |
为什么跳过两个块? 不是
我也阅读了文档,但无法澄清我的怀疑。
在python中循环之后使用else子句是为了检查某个对象是否满足某些给定条件。
如果你正在实现搜索循环,那么如果循环没有使用像break这样的结构突然终止,则在循环结束时执行else子句,因为假设如果使用break,则满足搜索条件。
因此,当您使用break时,不会评估else子句。 但是,当while条件求值为false后自然退出循环时,将评估else子句,因为在这种情况下,假定没有对象符合您的搜索条件。
1 2 3 4 5 6 7 | for x in data: if meets_condition(x): print"found %s" % x break else: print"not found" # raise error or do additional processing |