在Python中有“做......直到”吗?

时间:2009-11-02 16:04:27

标签: python loops

  

可能重复:
  Emulate a do-while loop in Python?

有没有

do until x:
    ...

在Python中,还是实现这种循环结构的好方法?

4 个答案:

答案 0 :(得分:225)

There is no do-while loop in Python.

这是一个类似的结构,取自上面的链接。

 while True:
     do_something()
     if condition():
        break

答案 1 :(得分:24)

没有预先打包的“do-while”,但实现特殊循环结构的一般Python方法是通过生成器和其他迭代器,例如:

import itertools

def dowhile(predicate):
  it = itertools.repeat(None)
  for _ in it:
    yield
    if not predicate(): break

所以,例如:

i=7; j=3
for _ in dowhile(lambda: i<j):
  print i, j
  i+=1; j-=1

根据需要执行一条腿,即使谓词在开始时已经是假的。

通常最好将更多的循环逻辑封装到您的生成器(或其他迭代器)中 - 例如,如果您经常遇到一个变量增加的情况,一个减少,并且您需要一个do / while循环来比较它们,你可以编码:

def incandec(i, j, delta=1):
  while True:
    yield i, j
    if j <= i: break
    i+=delta; j-=delta
你可以使用

for i, j in incandec(i=7, j=3):
  print i, j

取决于你想要在你的生成器(或其他迭代器)中放置多少与循环相关的逻辑以及你想要在它之外有多少(就像任何其他函数,类或其他用途一样)你可以用来从主流执行中重构代码的机制,但是,一般来说,我喜欢看到for循环中使用的生成器很少(理想情况下没有)“循环控制逻辑”(代码)与更新下一个循环段的状态变量和/或测试是否应该再次循环有关。

答案 2 :(得分:20)

我更喜欢使用循环变量,因为它倾向于阅读比“1:”更好一点,并且没有看起来丑陋的break语句:

finished = False
while not finished:
    ... do something...
    finished = evaluate_end_condition()

答案 3 :(得分:10)

不,没有。而是使用while循环,例如:

while 1:
 ...statements...
  if cond:
    break