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