【问题标题】:Why there is no do while loop in python为什么python中没有do while循环
【发布时间】:2016-09-13 20:58:48
【问题描述】:

为什么 Python 不像许多其他编程语言(例如 C)那样具有“do while”循环?

示例:在 C 语言中,我们有如下的 while 循环:

do {
   statement(s);
} while( condition );

【问题讨论】:

  • 状态被拒绝python.org/dev/peps/pep-0315
  • 重新保留通知:Martijn 提供的链接看起来不太基于意见:“2009 年 4 月恢复 PEP 的后续努力没有取得成功,因为没有出现可以竞争的语法。 ..”
  • @DonkeyKong:如何解决它并不能回答为什么没有这样的语法的问题。
  • @MartijnPieters 嗯,是的,我想。我只是觉得那个问题的答案提供了与被拒绝的 PEP 相同的原因 - 没有出现可以与 while True 形式竞争的语法。不过,您有一点 - 他们没有提到您答案的第一段。

标签: python loops do-while


【解决方案1】:

没有do...while 循环,因为没有很好的方法来定义一个适合所有其他 Python 复合语句使用的 statement: indented block 模式的循环。因此,添加此类语法的提议从未达成一致。

实际上也没有任何需要来拥有这样的结构,而不是当你能做到的时候:

while True:
    # statement(s)
    if not condition:
        break

并具有与 C do { .. } while condition 循环完全相同的效果。

PEP 315 -- Enhanced While Loop:

拒绝 [...] 因为没有出现可以 用以下形式竞争:

    while True:
        <setup code>
        if not <condition>:
            break
        <loop body>

找到了 PEP 中提议的替代语法 一个基本的 do-while 循环,但它获得的支持很少,因为 条件在顶部:

    do ... while <cond>:
        <loop body>

或者,如Guido van Rossum put it

请拒绝 PEP。这些方面的更多变化不会使 语言更优雅或更容易学习。他们只会节省一些仓促的 人们在打字的同时让其他人不得不阅读/维护他们的代码 想知道这是什么意思。

【讨论】:

  • "实际上也没有必要有这样的构造,而不是当你可以这样做的时候:"如果你这样做,然后在条件检查之前在 while 循环中的某处调用"继续" ,那么它的效果将与在其他具有 do-while 循环的语言中执行相同的事情非常不同,因为 continue 语句意味着您永远不会检查条件。一个真正的 do-while 循环将允许您调用 continue ,然后在条件为假时结束循环。我喜欢 python,但我真正想念的两件事是 do-while 和 real for i=0; i++, i
  • @Vinzent 然后使用try:...finally: 构造并将条件放入finally 块中。 try 块中的任何continue 语句仍将触发`finally` 块,因此仍会检查条件。我创建了一个quick demo
  • @Vinzent 说:我从来不需要这样做。一般来说,我通常将更复杂的循环需求封装在迭代器中。
  • 没有想到你提出的“try-finally”结构,这是一种方法。当然有多种方法可以实现,其中一种是迭代器,偶尔也是我最终诉诸的。但对我来说,在最简单的情况下,感觉真的很笨拙和尴尬。并不是说有些事情你在 python 中不能做,因为它缺少 do-while 结构,只是 do ---> if condition: continue ---> while condition: .. 结构做了很多代码更加紧凑,整洁和可读。在我看来。
  • @Vinzent 没有人提出这个论点; “不会使语言更容易学习”与“使语言更难学习”不同。此外,Guido 在更广泛的背景下发表了该评论,解决了讨论中提出的论点。至少可以追溯到 4 年的讨论,而且从未发生过。
【解决方案2】:

因为每个人都看错了。你不想做……而你想要做……直到。

如果初始条件为真,WHILE 循环可能就是您想要的。替代方案不是 REPEAT ... WHILE 循环,而是 REPEAT ... UNTIL 循环。初始条件以假开始,然后循环重复,直到它为真。

明显的语法是

repeat until (false condition):
  code
  code

但由于某种原因,这让每个人都无法理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 2021-04-14
    • 2016-05-26
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多