Python PR

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

記事内に商品プロモーションを含む場合があります

Pythonでは、if文や関数などの複合文で定義する処理のまとまり(ブロック)を表現するのにインデントが用いられます。

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

この記事では、Pythonで正しくインデントしてブロックを表現する方法を見ていきましょう!

複合文とは?

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

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

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

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

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

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

C言語の関数

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

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

Pythonの関数

def func():
    print('関数内')
    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

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つ(プロジェクトごとに統一)
  • タブよりスペースの方が安全

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

まあ、エディタを使っていると勝手にインデントしてくれるので意識する機会は少ないですが、かなり基本的なことなので必ず覚えておきましょう!

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