有没有
do until x: ...
还是实现这种循环结构的好方法?
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
根据需要执行一个分支,即使谓词在开始时已经为 false。
通常最好将更多的循环逻辑封装到您的生成器(或其他迭代器)中——例如,如果您经常遇到一个变量增加,一个变量减少的情况,并且您需要一个 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循环中使用的生成器,它几乎没有(理想情况下没有)“循环控制逻辑”(与更新下一个循环部分的状态变量相关的代码,或者测试你是否应该再次循环)。
for
不,没有。相反,使用 while循环,如:
while
while 1: ...statements... if cond: break
我更喜欢使用循环变量,因为它读起来比“ while 1:”好一点,而且没有难看的 break语句:
break
finished = False while not finished: ... do something... finished = evaluate_end_condition()