可能重复:
在Python中模拟do-while循环?
有没有
do until x:
...
Run Code Online (Sandbox Code Playgroud)
在Python中,还是实现这种循环结构的好方法?
the*_*rty 238
这是一个类似的结构,取自上面的链接.
while True:
do_something()
if condition():
break
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 24
没有预先打包的"do-while",但实现特殊循环结构的一般Python方法是通过生成器和其他迭代器,例如:
import itertools
def dowhile(predicate):
it = itertools.repeat(None)
for _ in it:
yield
if not predicate(): break
Run Code Online (Sandbox Code Playgroud)
所以,例如:
i=7; j=3
for _ in dowhile(lambda: i<j):
print i, j
i+=1; j-=1
Run Code Online (Sandbox Code Playgroud)
根据需要执行一条腿,即使谓词在开始时已经是假的.
通常最好将更多的循环逻辑封装到您的生成器(或其他迭代器)中 - 例如,如果您经常遇到一个变量增加的情况,一个减少,并且您需要一个do/while循环来比较它们,您可以编码:
def incandec(i, j, delta=1):
while True:
yield i, j
if j <= i: break
i+=delta; j-=delta
Run Code Online (Sandbox Code Playgroud)
您可以使用如下:
for i, j in incandec(i=7, j=3):
print i, j
Run Code Online (Sandbox Code Playgroud)
你需要在你的生成器(或其他迭代器)中放置多少与循环相关的逻辑以及你想要在它之外有多少(就像你可以使用函数,类或其他机制一样)用来重构你的主要执行流程中的代码),但是,一般来说,我喜欢看到在一个for循环中使用的生成器很少(理想情况下没有)"循环控制逻辑"(与更新下一个状态变量相关的代码)循环腿和/或测试你是否应该再次循环).
Pau*_*McG 24
我更喜欢使用循环变量,因为它倾向于读取比"1:"更好一点,并且没有丑陋的break语句:
finished = False
while not finished:
... do something...
finished = evaluate_end_condition()
Run Code Online (Sandbox Code Playgroud)
f0b*_*b0s 10
不,没有.而是使用如下的while循环:
while 1:
...statements...
if cond:
break
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
323692 次 |
| 最近记录: |