Pythonの重要概念「インデントでブロックの範囲を指定する」

Pythonではインデント(字下げ)が重要な意味を持ちます。 それはPythonの言語仕様として 「インデントでブロックの範囲を指定する」 からです。

ブロックとは

ブロックとは複数の文の集まりです(1つの文でも構いません)。 コードブロックと呼ぶ場合もあります。
次のif文を記述したサンプルコードでは、 条件Aが真(True)の時に実行される文1と文2が1つのブロックで、 条件Aが偽(False)の時に実行される文3と文4が1つのブロックです。

if 条件A:
	文1
	文2
else:
	文3
	文4

それぞれのブロックをifブロックelseブロックという言い方をします。
「if 条件A:」や「else:」の部分はフロー制御文と言います。

ifブロック

条件分岐のif文だけでなく、 ループ処理でもブロックは使われ、 例えばwhile文のブロックはwhileブロックと言います。

whileブロック

このようにPythonはインデントでブロックの範囲を示します

多くの他のプログラミング言語でのブロック

多くの他のプログラミング言語では ブロックの範囲をインデントではなく「波括弧」で囲って指定します。
例えば、次のコードのようにJavaScriptでは波括弧{}で囲った部分が ブロックとなります。

// JavaScriptのifブロック
if (条件) {
	文1
	文2
}

波括弧{}を使う言語はJavaScript以外にもPHPやC言語、Java等、 他にもたくさんあります。

ですから、「インデントでブロックの範囲を指定する」 のはPythonの大きな特徴の1つです。

インデントの方法と注意点

インデント(字下げ)する方法は主に次の3つのです。

  • タブ文字
  • 半角スペース4文字
  • 半角スペース2文字

Pythonの標準コーディング規約とされている「PEP8」では 半角スペース4文字が推奨されています。 このサイトはタブ文字を使用しています。

インデントはどの方法でもいいのですが、 大事なのはコード内で統一することです。 Python3以降では同じブロック内で インデントの方法が違うとエラーになります

次のサンプルコードを実行するとエラー「IndentationError」が発生します。 一見同じように字下げしていると思えますが、 ブロック内の1行目がタブ文字で、 2行目は半角スペース4文字です。

if 1:
	print("a") # タブ文字
    print("b") # 半角スペース4文字
実行結果
    print("b") # 半角スペース4文字
                          ^
IndentationError: unindent does not match any outer indentation level

このようにインデントが違うとエラーが発生するので 注意が必要です。

Pythonを使って個人でプログラミングする場合は 自分の好きな方法で字下げしてください。 ですが会社等でチームの一員として開発する場合は チームのコーディング規約に従ってください。

Python