最初は紛らわしいけど、腑に落ちるとコードの見通しが一気によくなります。違いを一目で掴んで、短い例で体に馴染ませましょう。
| キーワード | 範囲(どこまで止まる/抜ける) | 主な動作 | 典型的な用途 | 注意点 |
|---|---|---|---|---|
| break | 「今いるループ」だけ | ループを即終了して外へ出る | 検索の打ち切り、早期終了 | ネスト外のループや関数は終わらない |
| continue | 「今いるループ」だけ | 今回の周回をスキップして次へ | フィルタリング、不要ケースのスキップ | 後続の処理が飛ぶので副作用漏れに注意 |
| return | 「今いる関数」全体 | 関数を終了し値を返す | 成否の即時返却、最初に見つかった一致の返却 | スクリプト直書きでは使えない(関数化が必要) |
基本の動作と短い例
break(ループを終わらせる)
- 目的: 条件を満たしたら、もうこれ以上ループを回す必要がない。
- イメージ: 「見つかった。打ち切り。」
for i in range(5):
if i == 3:
break
print(i)
# 出力: 0, 1, 2
Pythonbreakが実行された瞬間、そのループの繰り返しは終了し、ループの直後へ進みます ビズドットオンライン。
continue(今回だけスキップ)
- 目的: いまの要素は対象外。処理せず次へ。
- イメージ: 「この回は飛ばす。続行。」
for i in range(5):
if i == 3:
continue
print(i)
# 出力: 0, 1, 2, 4
Pythoncontinueの後にある同じ周回内のコードは実行されず、直ちに次の周回へ移ります ビズドットオンライン。
return(関数を終わらせて値を返す)
- 目的: 結論が出たので関数ごと終了し、結果を渡す。
- イメージ: 「答えが出た。関数を閉じる。」
def first_even(nums):
for n in nums:
if n % 2 == 0:
return n
return None
print(first_even([1, 3, 4, 7])) # 4
Pythonreturnはループではなく「関数の終了」を引き起こします。関数の途中で返すことで早期に処理を終えられます py-note.com。
使い分けの指針(直感のひとこと)
- break: 「目的を達成した。残りは不要」=探索の打ち切りや中断に最適。
- continue: 「この要素は対象外。次へ」=フィルタリングや条件付きスキップに最適。
- return: 「結論が出た。関数終了」=見つかった結果や成否の即返しに最適。
よくある落とし穴と注意点
- break/continueは“そのループ”にしか効かない: ネストしていると「どこまで抜けるか」を勘違いしがち。breakは現在のループだけを終える。外側のループや関数は続く。
- returnは“関数ごと”終わる: ループの中でreturnすると、ループではなく関数全部が終了する。後続の処理は一切実行されない。
- passは“何もしない”だけ: 似ている名前で混乱しがちだが、passは文法上必要な場所で「何もせず通過する」。動作への影響はない。
for-elseの補足(breakとの関係)
Pythonのfor-else構文は、「ループの途中でbreakされなかったときだけ」elseが実行されます。つまり、探索で見つからなかった場合にelse側が走る、と覚えると分かりやすいです。
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
# nは素数ではない
break
else:
# 内側ループでbreakされなかった → nは素数
print(n, "is a prime number")
Pythonこの挙動は「breakが使われない場合にelseが実行される」という点がポイントです。
目的別ミニ例題
例1: 最初に見つかった偶数を取得(break vs return)
- break版(ループだけ終える、後続で使う)
nums = [1, 7, 9, 12, 15]
first = None
for n in nums:
if n % 2 == 0:
first = n
break
print(first) # 12
Python- return版(関数化して結論を即返す)
def first_even(nums):
for n in nums:
if n % 2 == 0:
return n
return None
print(first_even(nums)) # 12
Python「値を返したいか」「その場で終えたいか」で使い分けます。
例2: 不要データを飛ばしながら集計(continue)
data = [10, None, 5, 0, None, 7]
total = 0
count = 0
for x in data:
if x is None or x == 0:
continue # 集計に含めない
total += x
count += 1
print(total, count) # 22 3
Pythonスキップ条件が増えるほど、continueの使い方が効果的になります。
例3: ネストしたループでのbreakの範囲
pairs = [(1, 2), (3, 4), (5, 6)]
found = False
for a, b in pairs:
for t in (a, b):
if t == 4:
found = True
break # 内側ループだけを終了
if found:
break # 条件で外側も明示的に終了
print(found) # True
Python「どのループを終えるか」を明確に書くと読みやすく、意図が伝わります。
まとめの一言
- ループを終えるならbreak、今回だけ飛ばすならcontinue、関数を終えて答えを返すならreturn。 この“範囲の違い”さえ腹落ちすれば、迷いは激減します。

