Python Project - continue,break,pass
制御をつかさどる構文にはfor文、if文、while文の3つがありました。
この3つの制御フローを駆使することで、大抵の場合はどんなシステムでも作れる!

このfor文、if文、while文内では、処理の厚みを増すために(?)
さらに3つの補助的な制御文が使える。
それがcontinuebreakpassである。



continue

continueは特にfor文とif文の組み合わせ構文の中で使われ、
「continue」以下の処理を飛ばして、次番目のループ(ループ変数)に移る」という役割を果たす。
continueの例を次のコードで確かめてみよう。

for i in range(10):
  if i % 2 ==0:
    continue
    print '偶数です'
  else:
    print i, 'は奇数です'

コードを実行すると、右図のような出力が得られる。
このプログラムは、

変数「i」が奇数の場合は「奇数です」と出力してほしい。
でも、偶数のときはどうでもいいから次の変数に変えて(ループを進めて)。

という意図がある。この意図を達成するために、if文において
変数「i」が偶数側の分岐に入った場合は、以降の処理は無視してとにかく次のループに行ってもらうように
continueが組み込まれている。
pythonシステムがcontinue文を見つけると、以降の処理はとばされるため
continueの次に記載してあるprint '偶数です'は一切出力されていないことに注目してほしい。


break

breakはfor文やwhile文内で使われ
「途中でループから抜けたい」時に大きな役割を果たす。
pythonでデータ解析をするときなど、非常に重宝する制御文である。
次のコードと出力結果を見てみよう。

List=[2,5,3,4,8,1,10,7,0,9,6,5]    #こういうデータリストがあったとして
for i in List:
  if i == 0:
    print '0を見つけたのでfor文を抜けます'
    break
  elif i % 2 ==0:
    print i, 'は偶数です'
  else:
    print '今日は暑いですね'

本来、for文では指定されたループの回数だけ繰り返しを実行してくれます。
今回の場合もListの長さである12回分の繰り返しが実行されるはずですが、出力を見ると12回の繰り返しは実行されていませんね。
これはコード5行目のbreakによってループ処理が強制終了したからです。
もうお分かりかと思いますが、上記のコードではListの要素を変数「i」に順次格納していき、
その値によって3つの分岐を設けています。もし「i」の値が0であれば3〜5行目の処理が実行され、
break文に出会ったのでループから抜けたのです。
よってそれ以降(具体的にはListの0以降)のループ処理は行われていません。
ちなみに・・・今日は暑いですね・・・このprint文は意味不明ですよね(笑)

僕が開発しているデータ処理システムでも、このbreak文はとても活躍してくれています。


pass

僕はあまり使うことはないんですが・・・
passとは「コードの形式上、どうしても何かを書かないといけない」
というときに記述する文であり、そのはたらきは「何もしない」です。。。
たとえばif-else文を作る時、
「if分岐に入ったときは○○の処理をしてほしいんだけど、
else分岐の場合は何もしなくていいんだよなぁ・・・」
という場合、else分岐の部分には何の処理文も必要ないのだけれど、
pythonコーディングの形式(約束)上、何かしらを書かなくてはいけない。
こんな時はpassと書いてあげれば「何もしない」という処理が実行されるのです。


ひょっとしたら、こんな感想を抱いた人がいるのでは?
passなんて何の役に立つの・・・?
だって、少し上に書いているcontinueと同じことじゃない?
下のコードの実行結果を見れば一目瞭然ジャン!!」

<勘違い君が主張するコード>
for i in range(5):tabtabtabtabfor i in range(5):
tabif i==2:tabtabtabtabtabtabtabif i==2:
tabtabprint '2だよ'tabtabtabtabtabtabprint '2だよ'
tabelse:tatabtabtabtabtabtabtabelse:
tabtabcontinuetabtabtabtabtabtabtapass

たしかに、勘違い君の言っている通りですね。
上の2つのコードを実行すると、出力結果は全く同じです。
というわけで、上のようなシンプルなコードであればcontinuepassは同じはたらきをしているように見えます。
でも、だまされないでください。
もう一回言いますね、だまされないでください!
では、何が違うのでしょうか?下に簡単に書いてみましょう。

continue・・・continue以下の処理をとばして次のループ(ループ変数)へ移行する
pass・・・「何もしない」という処理をする

これでもイメージがつかめない方は、下の2つのコードの出力結果を比べてみましょう。
コードの違いはcontinuecontinueが違うだけで、そのほかは全く同じですよ。

<continueとpassのはたらきの違いを実感する>
for i in range(5):tabtabtabtabfor i in range(5):
tabif i==2:tabtabtabtabtabtabtabif i==2:
tabtabprint '2だよ'tabtabtabtabtabtabprint '2だよ'
tabelse:tatabtabtabtabtabtabtabelse:
tabtabcontinuetabtabtabtabtabtabtapass

tabif i==3:tabtabtabtabtabtabtabif i==3:
tabtabprint '3だよ'tabtabtabtabtabtabprint '3だよ'
tabelse:tatabtabtabtabtabtabtabelse:
tabtabcontinuetabtabtabtabtabtabtapass

上記コードの出力結果は
左側のコードだと
print '2だよ'
となりますが、右側のコードだと
print '2だよ'
print '3だよ'
となります。

ね、出力結果が変わったでしょ?
今回のコードのポイントは「1つのfor文の中に2セットのif-else文がある」ということです。
左側のcontinueコードの場合、5行目のcontinueに出会った途端、以降の処理(以降のコード)は無視され
次のforループ変数へと移行してしまいます。
よって2つ目のif-else構文に処理が流れていくのは「if i==2」の処理の後だけで、それ以外は全く反映されないのです。
対して右側のpassコードの場合は、単に何もしないという処理を実行しただけで
強制的に次のループ変数へと移行することはありません。
ですので、プログラムはかならず2つのif-else文を流れていくのです。

これでpass文の重要さも分かって頂けましたよね?














python-project