Python

【Python】正しいインデントの仕方【複合文の書き方】

Pythonでは、if文や関数などの処理のまとまり(ブロック)を表現するのにインデントが用いられます。インデントとは、行の先頭に空白を入れて字下げを行うことを言います。この記事では、Pythonで正しくインデントし、ブロックを表現する方法を解説します。

複合文とは?

if文や関数などのように他の文を持つ文のことを複合文と呼びます。

複合文には、他の文 (のグループ) が入ります; 複合文は、中に入っている他の文の実行の制御に何らかのやり方で影響を及ぼします。
引用先: 8. 複合文 (compound statement) — Python ドキュメント

複合文は、基本的に複数行にまたがって記述されます。例えば、if文だったら条件分岐後に実行する処理、関数だったら呼び出されたときに実行する処理を記述します。

このように、複数の構文や命令などをまとめたものをコードブロック(code block)、または省略してブロックと呼びます。

Pythonはブロックをインデントで表現する

例えばC言語で関数を定義した場合、以下のように { から } までがその関数の処理だと認識されます。

void func(){
    printf("関数内\n");
    printf("関数内\n");
}

対してPythonではインデント(字下げ)を使ってブロックを表現します。 コロン(:)に続く行のインデントされている行がその関数の処理だとして認識されます。

def func():
    print('関数内')
    print('関数内')

print('インデントされていないので関数外')

このようにPythonでは、 コロン(:)とインデントを用いてブロックが表現されます。

# if文
if 条件式:
    pass
elif 条件式:
    pass
else:
    pass

# for文
for i in range(3):
    pass

# while文
while 条件式:
    pass

# 関数
def func():
    pass

# クラス
class MyClass:
    pass

複合文の書き方

複合文は、1つ以上の節からなり、ヘッダスイート(suite)を持ちます。

ヘッダは、キーワードで始まりコロン(:)で終わります。スイートは、ヘッダに続く行でヘッダよりも1つ多くインデントされた文の集まりです。

# ヘッダ
if 条件式:
    # スイート

# ヘッダ
elif 条件式:
    # スイート

# ヘッダ
else:
    # スイート

節の中に節を含めるには、インデントを増やして記述します。

if 条件式:
    # インデント
    if 条件式:
        # さらにインデント
        if 条件式:
            # さらにさらにインデント
            pass

インデントのスペースの数

Pythonのコーディング規約であるPEP8には以下のように記述されています。

1レベルインデントするごとに、スペースを4つ使いましょう。
はじめに — pep8-ja 1.0 ドキュメント

このルールは「みんなが同じ書き方すれば見やすいよね?」というもので、守らなくてもエラーになったりはしません。

特に他の規約がない限り守るようにしましょう!

if True:
    # スペース4つ
    pass

ただし、ブロック内では統一したインデントを使わないとエラーが発生します。

if True:
    print('スペース4つ')
  print('スペース2つ')

実行結果

  File "/Users/user/Desktop/Python/test.py", line 3
    print('スペース2つ')
                                ^
IndentationError: unindent does not match any outer indentation level

節ごとにスペース数を変更することができますが、すごくわかりにくいのでプロジェクトごとにスペース数は統一しましょう!

# インデントがバラバラの悪い例
if 条件式:
  # スペース2つ
  if 条件式:
     # スペース3つ
     if 条件式:
         # スペース4つ
         pass

タブとスペースどちらを使うべきか

結論から言えばスペースを使った方が安全です!

タブは環境によって扱われ方が異なることがあり、タブを使ってコードを書いた場合、別環境ではエラーが発生してしまう恐れがあります。

スペースを使った場合、別環境でもエラーは発生しないので(少しめんどくさいけど)スペースを使った方が安全です。

ただし、こちらもプロジェクトごとに統一するということが大切です。

まとめ

この記事では、Pythonのインデント方法を解説しました。

  • Pythonではブロックはインデントで表現する
  • インデントは基本的にスペース4つ(プロジェクトごとに統一)
  • タブよりスペースの方が安全

上記のことさえ覚えておけば問題ありません。
あとは、実際にコードを書いて慣れていきましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』