python入門: 7. インデントが大事!
この章は, pythonシェルではなく, pythonスクリプトをLinuxシェルから走らせる形で進める。pythonで複雑な処理をするようになると, pythonコマンドだけでなく, pythonスクリプトを使うことが多くなるからだ。
では, テキストエディターなどで, 以下のpythonスクリプトを, test2.pyという名前で作成せよ($ gedit test2.pyなど):
x=0 for i in range(0, 5): x=x+i print(i, x)
ここで, 3行目と4行目のそれぞれの頭が4文字ぶんのスペースで下げられていることに注意! このようにスペースで行頭を下げることをインデントという。
さて, このtest2.pyが完成したら, 走らせてみよう($ python3 test2.py)。結果は以下のようになるだろう:
0 0 1 1 2 3 3 6 4 10
では, test2.pyをちょっとだけ変えてみよう:
x=0 for i in range(0, 5): x=x+i print(i, x)
何をやったかというと, 最後の行のインデントを削除した(行頭のスペースを削除した)のである。これで保存して, 再びtest2.pyを実行してみよう。すると,
4 10
という結果(さっきやった結果の最終行だけ)が表示される。このように, インデントの有無によって, pythonは実行結果が変わってしまうのだ!!
ここでは, for文がまわす命令の範囲をインデントが決めていたのだ。pythonでは, for文の次に来る命令はfor文そのものよりも下げたインデントで始まる。そして, それと同じレベルのインデントが続く限り, それはfor文がまわす対象範囲として認識される。だから, 最初の例では, x=x+iとprint(i, x)という2つの命令が, forがまわるたびに実行されていた。 ところが, 次の例では, print(i, x)のインデントが削除された。この状態では, それはもはやfor文がまわす対象ではない。そこでfor文はx=x+iという命令だけを繰り返し, それが終わったあとに, print(i, x)という命令が実行された。それはfor文の外側なので, 1回しか実行されない。そのため, 表示されたのは
4 10
という1行だけだったのである。
このように, pythonは, 何かの命令の影響する範囲をインデントで表す。ここで注意:
- インデントのためのスペースの数(文字数)はユーザーが好きに決めてよい。1スペースでも2スペースでも3スペースでも4スペースでもよい。
- しかし慣習としては, 4スペースが推奨されている。特に理由がなければそれでいこう!!
- インデントはタブでやっても動く。しかしこれはトラブルの元なので薦められない。
- というのも, 複数の行について, 同じインデント(空白)に見えて, 実は片方はタブでもう片方はスペースでインデントされてた, みたいな状況では, pythonはエラーを出したり, 思い通りに動いてくれない。そして, このようなトラブルは, pythonトラブルの「あるある」の最上位なのである。
Keyword(s):
References:[python入門]