回答:
以下に簡単な例を示します。
for letter in 'Django':
if letter == 'D':
continue
print("Current Letter: " + letter)
出力は次のようになります。
Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o
ループの次の反復まで続きます。
continue
いますが、可能な場合はあまり役に立ちませんif letter != 'D': print 'Current Letter:', letter
私はあなたが「仕事に取り掛かる」前に満たさなければならない多くの条件があるループで継続を使用するのが好きです。したがって、次のようなコードの代わりに:
for x, y in zip(a, b):
if x > y:
z = calculate_z(x, y)
if y - z < x:
y = min(y, z)
if x ** 2 - y ** 2 > 0:
lots()
of()
code()
here()
私はこのようなコードを取得します:
for x, y in zip(a, b):
if x <= y:
continue
z = calculate_z(x, y)
if y - z >= x:
continue
y = min(y, z)
if x ** 2 - y ** 2 <= 0:
continue
lots()
of()
code()
here()
このようにすることで、非常に深くネストされたコードを回避します。また、最も頻繁に発生するケースを最初に排除することでループを最適化するのは簡単です。そのため、他のショートッパーがないときに、まれであるが重要なケース(除数が0など)のみに対処する必要があります。
continue
この方法での使用は、の使用に似ていGOTO
ます。ただし、これはを使用する正しい方法GOTO
です。
通常、続行が必要/有用な状況は、ループ内の残りのコードをスキップして反復を続行する場合です。
ifステートメントを使用して同じロジックを提供することができるので、私はそれが必要だとは本当に信じていませんが、コードの可読性を高めるのに役立つ場合があります。
if <condition>: continue
ではなく、if not <condition>: ...
それはそれなしで書かれていた場合はそれ以外に必要とされるインデントのレベルを避けることができます。
continue
ステートメントを使用するときはいつでも、基本的に条件テストセクションから飛び出し、ループの反復が続行できるようにします次のイテレーションへ?これがを使用するよりも優れているかどうかは、私にはわかりませんelse
。読みやすさと実行時のパフォーマンスの向上がすべてなのでしょうか?
import random
for i in range(20):
x = random.randint(-5,5)
if x == 0: continue
print 1/x
continueは非常に重要な制御ステートメントです。上記のコードは、ゼロによる除算の結果を回避できる典型的なアプリケーションを示しています。プログラムからの出力を保存する必要があるときによく使用しますが、プログラムがクラッシュした場合は出力を保存しません。上記の例をテストするには、最後のステートメントをprint 1 / float(x)に置き換えます。または、randintは整数を返すため、小数部がある場合は常にゼロになります。わかりやすくするために省略しました。
一部の人々は読みやすさについてコメントし、「ああ、それは読みやすさをそれほど助けにはなりません、誰が気にしますか?」
メインコードの前にチェックが必要だとします。
if precondition_fails(message): continue
''' main code here '''
メインコードが記述された後でも、コードを変更せずにこれを実行できます。コードを比較すると、メインコードの間隔が変更されないため、「継続」の追加された行のみが強調表示されます。
プロダクションコードのブレークフィックスを実行する必要がある場合を想像してみてください。コードを確認すると、それが唯一の変更であることが簡単にわかります。メインコードをif / elseでラップし始めると、間隔の変更を無視しない限り、diffは新しくインデントされたコードを強調表示します。これは、特にPythonで危険です。短期間でコードを展開しなければならない状況でない限り、これを十分に評価できないかもしれません。
def filter_out_colors(elements):
colors = ['red', 'green']
result = []
for element in elements:
if element in colors:
continue # skip the element
# You can do whatever here
result.append(element)
return result
>>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
['lemon', 'orange', 'pear']
continue
声明はここに何を追加しますか?これはを使用して削除できelement not in colors
、コードは同じように読みやすくなります。
3と5の倍数ではないすべての数値を出力するとします。
for x in range(0, 101):
if x % 3 ==0 or x % 5 == 0:
continue
#no more code is executed, we go to the next number
print x
if x %3 == 0 or x % 5 == 0:
、pass
、else:
、print x
continue
。私の結論は必要がないということですが、場合によっては(この例のように)を使用するとコードが読みやすくなりcontinue
ます。これは非常に良い例です。
IFを使用して実行できるため、絶対に必要というわけではありませんが、読みやすく、実行時のコストも低くなります。
データがいくつかの要件を満たさない場合、ループ内の反復をスキップするために使用します。
# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]
for time in commit_times:
hour = time[0]
minutes = time[1]
# If the hour is not between 0 and 24
# and the minutes not between 0 and 59 then we know something is wrong.
# Then we don't want to use this value,
# we skip directly to the next iteration in the loop.
if not (0 <= hour <= 24 and 0 <= minutes <= 59):
continue
# From here you know the time format in the tuples is reliable.
# Apply some logic based on time.
print("Someone commited at {h}:{m}".format(h=hour, m=minutes))
出力:
Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45
ご覧のように、continue
ステートメントの後に間違った値が設定されていません。
if
continue
すべてのコードがブロックに含まれている場合にのみ実行できることを実行できます。ブロックのcontinue
外側にあるコードもスキップしますif
。
たとえば、変数の値に応じて別のことをしたい場合:
my_var = 1
for items in range(0,100):
if my_var < 10:
continue
elif my_var == 10:
print("hit")
elif my_var > 10:
print("passed")
my_var = my_var + 1
上記の例で使用する場合 break
、インタープリターするとループがスキップされます。しかし、continue
これを使用すると、if-elifステートメントがスキップされ、ループの次の項目に直接移動します。
my_var
すると0
。
continue
。
elif
はである必要がありif
ます。このコードは、自分が何をしているのかを理解しているようには見えません。