本当に誰でも読める!! Pythonソースコードの読み方講座(第3回) キーワード編 1:構文に関するキーワード

  • HOME
  • 本当に誰でも読める!! Pythonソースコードの読み方講座(第3回) キーワード編 1:構文に関するキーワード

本記事は当社が発行しているシミュレーションメールマガジンVol.3の記事です。
シミュレーションメールマガジンの詳細・購読申込はこちら のサポートページから

本当に誰でも読める!! キーワード編 1: 構文に関するキーワード

S4開発エンジニアによるPython講座、3回目は Python におけるキーワードを解説します。今回もプログラミングの経験が無い方でもコードを「読める」ことを目指していきたいと思います。 「プログラミングをこれから始めるので苦手意識を払拭したい」「自身でコードを書く予定はないが、勘所だけでも理解したい」という方におすすめの内容です。 また、Pythonプログラミング経験のある方でも、新しい観点から知識を整理するきっかけになるかもしれません。

Pythonにおけるキーワード

さて、第1回では Python のコードは以下の要素に分解できる、ということをお話しました:

単語: vs, ds, g, selfなど
単語同士をつなぐピリオド "."
単語の後ろにつくカギカッコ "[" "]"
単語の後ろにつくカッコ "(" ")"
一部の特別な単語: ここでは for, if があります
コロン ":"
演算記号 "+", "-", "="など

この中の「一部の特別な単語」は「キーワード(予約語)」と呼ばれ、Python3.9 では次の35個が登録されています:

    False      await      else       import     pass
    None       break      except     in         raise
    True       class      finally    is         return
    and        continue   for        lambda     try
    as         def        from       nonlocal   while
    assert     del        global     not        with
    async      elif       if         or         yield

参考: Python公式ドキュメント

これらはソースコードやライブラリ中で定義して使われる単語(変数)などと異なり、説明なしに使われるものになります。したがって、Pythonコードを読むためにはキーワードについてあらかじめ知っておく必要があります。
今回は35個の中から頻出のキーワードである

    if while for break continue else

を6個を整理だてて解説し、これらの「読み方」を知ることでコードを読むときのカベを低くすることを目標とします。

if while for

if while for はいずれも様々なプログラミング言語でおなじみの制御構文を表すためのキーワードですが、基本的に以下のように英語読みしてしまえば問題ありません:

if (条件):
    # 条件が満たされるとき、処理を行う
    (処理)

for (変数) in (動く範囲):
    # 変数を指定した範囲で動かして、繰り返し処理を行う
    (処理)

while (条件):
    # 条件が満たされる限り、繰り返し処理を行う
    (処理)

if はある処理を行うかどうかを決めており、for や while はある処理を繰り返し行うときの繰り返し方を指定する、というイメージです。 for に関して具体例を挙げてみます。次のコードを実行すると0から99までを表示されます。読み方は次のとおりです:

# i を0から99まで動かして、
for i in range(100):
    # i を表示することを繰り返す
    print(i)

for の行に現れる in も本来は固有の意味のあるキーワードですが、ここでは for と常にセットで使われる形のため、特に気にする必要はありません。 range と print は組み込み関数と呼ばれる、いわば「Python側が用意している単語」になります。Python側が用意しているという点ではキーワードと同じですが、役割が異なります。 これらについては回を改めて解説したいと思いますので、今は読み飛ばして構いません。

ところで、構文を作るキーワードは

  • 必ず行の最初に書く
  • 行の最後にコロン ":" を配置する
  • 続く行はインデント(字下げ)して書く (複数行になってもOK)

というのが約束になっています。上の例のいずれでも当てはまっていますね。 特に、字下げした(処理)部分のことを「(コード)ブロック」と呼びます。覚えておくと良いでしょう。 ちなみに、字下げ幅は2文字、4文字など自由に選択できます。ひとつのブロックで揃ってさえいれば、ソースコードの異なる箇所で異なる字下げ幅を使っても問題ありません(読みづらいので推奨されませんが)。

break continue

前項の制御構文のうち、繰り返し処理を行う for, while の(処理)ブロックによく出現するのが break および continue の2つのキーワードです。 これらはそれぞれ、以下のように読みます:

break # 繰り返しから抜ける
continue # 現在の繰り返しをやめる(次に行く)

break は「繰り返しをやめる」と解釈します。条件を無視して(破って)ブロックの外まで進むわけですね。
例えば先程のコードに次のように if ブロックを足すと、i を 0 から99まで表示するはずのものが、10までで終了する、というようなコードになります。

# i を0から99まで動かして、
for i in range(100):
    # i を表示することを繰り返す
    print(i)
    if i==10:
        # i が10に達したら for 文から抜ける
        break

一方、continue は「繰り返しを続ける」と解釈します。現在の繰り返し処理はスルーして、その先に進む、というイメージです。 上のコードを少し書き換えて次のようなコードにしてみました。こちらは「0から99までのうち、奇数だけ表示する」という挙動になります:

# i を0から99まで動かして、
for i in range(100):
    # 以下を繰り返す: 
    if i%2==0:
        # iを2で割った余りが0であるとき、このループをスルー
        continue
    # そうでなければ、i を表示
    print(i)

else

最後に、if と合わせてよく使われる else を紹介します。else も構文に関わるキーワードになります。 前項のようなキーワードのブロックの次に書くことで、「(if 文において)条件が満たされなかった場合」「(for/while文において) breakせずにブロックを抜けた場合」に処理されるブロックを記述することができます。

if ... else の場合は英語と同じように読むことで問題ありません。次のような形で読むことができます:

# 条件が満たされるならば処理1を、そうでなければ処理2を実行する
if (条件):
    (処理1)
else:
    (処理2)

for / while の場合 if ほど直感的ではないのですが、以下のように、「break せずに繰り返しを終えたら処理する」という挙動になります:

# 変数を指定した範囲動かし、都度条件をチェックする
for (変数) in (動く範囲):
    if (条件):
        # 条件が満たされるならばブロックを抜ける
        break
else:
    # break せずに for 文を終えた場合、処理を行う
    (処理)

while の具体例は省略しますが、for の場合と同様の読み方で問題ありません。 for / while の場合は "else" を "then" と読み替えたほうが分かりやすい、と言われています。「繰り返しを無事に終えたら、これを行う」というような読み方ですね。 慣れればかなり便利な構文ですが、使われる頻度はやや少ない印象です。

今回は構文に関するキーワードである if for while、これらと同時に用いられることの多い break continue else の6つのキーワードを扱いました。 実は構文に関するキーワードはまだあります。次回はそれらを解説していきたいと思います。

豊岡 祥 株式会社 NTTデータ数理システム シミュレーション&マイニング部所属。
S4 Simulation System の開発のほか、機械学習・シミュレーション・数理最適化を幅広く扱い、分野を横断した問題解決に取り組んでいる。
入社後に競技プログラミングをはじめ、PGBATTLE2023にて企業の部団体3位入賞。

著書: 「XAI(説明可能なAI)──そのとき人工知能はどう考えたのか?」リックテレコム
趣味: 合唱
「数理科学の基礎知識」e-book無料ダウンロードはこちら