Pythonのインデントについて
そもそもインデントとは
インデントという言葉はPythonに限らず、様々な場面で使用されています。
たとえばWordではこんな感じの設定項目がありますよね。
この設定をいじるとこんな感じになります。
この例では上の文章に対してインデント左1字を設定しています。
これは文章単位で左側に1文字分の空白をあけるという意味になります。
インデントは他の文章との違いを強調するために設定したりします。
Pythonにおけるインデントの役割
Pythonにも重要なキーワードとしてインデントという考え方があります。
書き方としてはWordにおけるインデントと同じで、左側に空白をあけます。
num = 0
for i in range(10):
num += i
print(num)
上記の例では3行目にインデントが設定されています。
3行目とそれ以外では当然ながら意味が異なります。
端的に言うとブロックが異なります。
ブロックとは
プログラミング言語におけるブロックとはローカル変数の有効範囲です。
また、for文やif文の処理の中身はブロック内に記述します。
他の言語ではブロックの変わり目は大括弧{}(または波括弧)で表します。
たとえばjavascriptだとこんな感じです。
var num = 0;
for(var i=0; i<10; i++){
num += i;
}
console.log(num);
上記の例では3行目が別のブロックになります。
インデントもついていますが、これはあくまでも見やすくするためのものなのでなくても問題はありません。
何なら、こんな感じで1行で書くこともできます。読みにくいですが。
var num = 0; for(var i=0; i<10; i++){num += i;} console.log(num);
Python以外の多くの言語ではインデントは必須ではなく、改行も不要だったりします。
必須ではないものの、コードを読みやすくするためにインデントや改行を入れます。
Pythonではインデントも改行も必須です。
その代わり行末のセミコロン(;)やブロックの大括弧({})が不要です。
そのためPythonはコードがよりシンプルで、読みやすいという利点があります。
インデントのルール
Pythonのインデントは「スペースまたはタブを用い、同一のブロック内ではインデントの種類を統一する」というルールがあります。
推奨はスペース4つですが、スペース(またはタブ)何個でもプログラムは動きます。
ただし、同一のブロック内でインデントの数が揃っていなかったり、スペースとタブが混在している場合はエラーになってしまいます。
PythonのTabErrorとIndentationErrorってなに?
ブロックが異なっていればコード全体でインデントが揃っていなくてもプログラムは動きます。
for i in range(10):
print(i, end="")
if i%2 == 0:
print(" 偶数") # スペース2つでインデント
else:
print(" 奇数") # スペース1つでインデント
上記の例でも問題なく動きますが、読みやすさ(可読性)は低下してしまいます。
ネット上で公開されているコードの多くはインデントにスペース4つが使用されています。
他の人から見ても分かりやすいように、Pythonでインデントを入れるときは極力スペース4つで統一することを心がけましょう。