【问题标题】:"else" with "while" and mysterious "break" [duplicate]“else”与“while”和神秘的“break”[重复]
【发布时间】:2016-05-13 23:17:09
【问题描述】:

我正在经历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

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

同样,如果我们只是更改代码以包含break,则该行为更加神秘。 Ideone Link.

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

此代码呈现以下输出,

#Output
done

为什么两个块都被跳过了?不是break 只是为了跳出循环,那为什么要跳出else 块?

我也通过了documentation,但无法消除我的疑虑。

【问题讨论】:

  • 在第一个套件中执行的 break 语句终止循环而不执行 else 子句的套件。 - 这句话中有什么不清楚的地方?我同意这很奇怪,但它仍然是规范的一部分。您不必强制使用此表单。
  • 不要在while 中使用else

标签: python while-loop break


【解决方案1】:

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

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

因此,当您使用 break 时,不会评估 else 子句。但是,当您在 while 条件评估为 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 

【讨论】:

  • 很好的解释......我最初在 python 中的 for else 语法下也遇到了问题
猜你喜欢
  • 2021-11-09
  • 2016-06-26
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多