关于python:“else”与“while”和神秘的“break”

“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链接

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

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

1
2
3
4
5
6
7
8
bCondition = True
while bCondition:
  break
else:
  print("Inside else
"
)
print("done
"
)

此代码呈现以下输出,

1
2
#Output
done

为什么跳过两个块? 不是break只是打破了循环,那为什么它会突破else块?

我也阅读了文档,但无法澄清我的怀疑。


在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