あらかじめパッケージ化された「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であっても、必要に応じて1つのレッグを実行します。
通常、より多くのループロジックをジェネレータ(または他のイテレータ)にカプセル化する方が適切です-たとえば、1つの変数が増加し、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
ループで使用されるジェネレーターを見るのが好きです次のループ区間、および/または再度ループする必要があるかどうかのテストを行います)。
ループ変数は、「while 1:」よりも少し読みやすく、見苦しいbreak
ステートメントがないため、ループ変数を使用することを好みます。
finished = False
while not finished:
... do something...
finished = evaluate_end_condition()
ありません。代わりに、次のようなwhile
ループを使用します。
while 1:
...statements...
if cond:
break