【空白は何個が正解?】pythonのインデントについて解説

今日は、pythonのインデントについて解説致します。

「インデントって何?」
「pythonのインデントって空白何文字にすればいいの?」
「Tabキーじゃダメなの?」

という疑問をお持ちの方へ向けて、

・インデントとは
・インデントの空白の数について
・タブとスペースについて

を説明いたします。

ぜひ、最後までお付き合いください。

なお、Pythonの記事については、こちらにまとめています。

目次

インデントとは

まずはじめに、インデントの意味について説明いたします。

インデントとは、行頭に空白を入れて文字を入れて字下げを行う事を言います。

pythonにおけるインデントは非常に重要です。

なぜなら、pythonは同じ数の空白でインデントされたまとまりを一つのブロックと認識する為です。

以下のif文の例をご確認ください。

# a=b=1   # True
# a=1;b=2 # False

if a == b:
    print('a')
    print('b')
else:
    print('a not equals b')

aとbの値が等しい時、出力結果は以下のようになります。

a
b

a == bがTrueのとき、if文の次の行から始まる「インデントが一つ下がった2行」が実行されています。

これは、インデントを合わせることによって、グループ化をしている為です。

例えばC言語で同様に行う為には、括弧でくくって一つのブロックとしてグループ化をしています。

このように、pythonでは括弧を使わずにインデントで処理をグループ化してまとめています。

インデントを合わせないとどうなる?

それでは、以下の処理をご確認ください。

sample.py:

a = 1
b = 2

if a == b:
        print('a')
    print('b')
else:
    print('a not equals b')

このような場合、どうなってしまうでしょう?

実行結果は以下のようになります。

  File "<tokenize>", line 6
    print('b')
    ^
IndentationError: unindent does not match any outer indentation level

Indentionエラーが起きてしまっていますね。

インデントが適切にできていないと、どのように処理をして良いか判定できなくなる為、エラーとなってしまいます。

このように、pythonでは必ずインデントを適切に処理する必要がでてきます。

インデント及び空白の数について

そこで疑問になるのが、「インデントする際に空白の数はいくつにすれば良いか」という点です。

これについてまとめた結果から言うと、「基本的には4文字の所が多いけど、プロジェクトによってまちまち」ということです。

PEP8によると

pythonのコーディング規約であるPEP8によると、以下のように述べられています。

1レベルインデントするごとに、スペースを4つ使いましょう。

pythonの規約なので、基本はここにあると思います。

ただし、

複数行を継続したときにインデントする場合は、4つスペースを使うルールを守らなくても構いません。

との記載もあります。

これは、4つのスペースを使うルールで字下げを繰り返し行うと、書いている途中ですぐに行の右端へ達してしまい、次の行へ折り返してしまう場合があるからです。

それだと読みにくいですよね。

pythonは可読性を重要視している為、やはりそれは避けたい所です。

PEP8に記載されている通り、一貫性にこだわりすぎる必要はありません。

空白の数さえ揃って入ればきちんとブロックとして認識されますので、それぞれのプロジェクトでルールを決めて、その決めたルールで一貫していれば問題はないと言えます。

なお、参考として4文字だと多い場合は2文字とするのが最も多いようです。

タブとスペースについて

インデントを行う際、タブを使うかスペースを使うか悩まれる方がいらっしゃるかと思います。

こちらについても、「一定の設定をしたうえでならどちらでも動作する」ようです。

タブかスペースかを考えるうえで大切なポイントは、以下になります。


【タブが優れている点】

  • タブだとそれぞれの人がタブストップに設定した個数の空白になる為、個人の見やすい好みに対応できる
  • 一回タブを押すだけで字下げができる(入力しやすい)


【スペースが優れている点】

  • 別環境にコードをコピーした場合、タブだとエラーが起きるリスクがある
  • タブストップがない場合、pythonでは空白8文字になってしまう。(すぐ右端に達してしまい折り返しが起きる)
  • 空白は全ての人が同じように見える

以上がタブとスペースの差異になります。

リスクが怖く色々考えるのが嫌という方は、スペースが無難ですね。

いずれにしても大前提としてプロジェクト内でタブとスペースが混在してしまうのは避けてください。

インデントエラーなどのトラブルが発生してしまいます…。

まとめ

いかがでしたでしょうか?

今回の記事では、

・インデントとは
・インデントの空白の数について
・タブとスペースについて

pythonの特徴であるインデントは、時として長所としても短所としても紹介されます。

しかしきちんと認識していればそれほど面倒なものではありません。

この記事を読まれた方が少しでもpythonへ親しみを持てるようになっていただけましたら幸いです。

この記事を書いた人

1991年生まれ。双子座。
理系大学で認証システムを学んだ後、アプリ開発者となる。
新しく学ぶ人に寄り添った記事を心がけて執筆します。
芸術が好き。いつか猫と暮らすのが夢。

目次