Python中有“do … until”吗?

可能重复:
在Python中模拟一个do-while循环?

有没有

do until x: ... 

在Python中,还是一个很好的方式来实现这样的循环构造?

Python中没有do-while循环。

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

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

没有预先包装的“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 

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

将更多的循环逻辑封装到生成器(或其他迭代器)中通常会更好 – 例如,如果您经常遇到一个variables增加,一个减less,并且您需要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 

这取决于你想要把多less循环相关的逻辑放到你的生成器(或其他迭代器)中,你想在它之外有多less(就像其他函数,类或其他机制的使用一样用来重构你的主stream执行代码),但是,一般来说,我喜欢看到在for循环中使用的生成器很less(理想情况下没有)“循环控制逻辑”(与更新状态variables有关的代码下一个环路和/或testing你是否应该循环再次或不)。

我更喜欢使用循环variables,因为它往往比“while 1:”读得更好,并且没有看起来丑陋的break语句:

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

没有没有。 而是使用一个while循环,如:

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