home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Python/インデントにタブ文字と空白は混ぜるな危険

Python/インデントにタブ文字と空白は混ぜるな危険

Python / インデントにタブ文字と空白は混ぜるな危険
id: 188 所有者: msakamoto-sf    作成日: 2009-02-22 20:56:56
カテゴリ: Python 

分かりやすくタブ文字を "(\t)", 空白をアンダースコア "_" で表記しますが、インデントで面白いことが出来ます。

if True:
(\t)print 'abc' # TAB文字1つでインデント
________print 'def' # 空白8つでインデント


abc
def

ちゃんと動きます。何となく、ブロックって同じ文字で同じインデントだと思ってましたので、これはちょっと面白い。

ちなみに、空白4つにしてしまうと駄目なんです。

if True:
(\t)print 'abc' # TAB文字1つでインデント
____print 'def' # 空白4つでインデント


File "t_hoge.py", line 5
   print 'def'
             ^
IndentationError: unindent does not match any outer indentation level

言語仕様リファレンスに「インデント」というそのものズバリのページがありまして、それを読むとどうやらTAB文字は空白に置換され、その文字数は最初の非空白文字までの空白が8の倍数になるように調整されるそうです。
http://www.python.jp/doc/release/ref/indentation.html :

まず、タブは (左から右の方向に) 1 つから 8 つのスペースで置き換えられ、
置き換え後の文字列の終わりの位置までの文字数が 8 の倍数になるように調整されます
(Unixで使われている規則と同じになるよう意図されています)。
次に、空白文字でない最初の文字までのスペースの総数から、その行のインデントを決定します。

そんなわけで、TAB文字と空白インデントを混在させることは可能です。可能です、が・・・TAB文字を4桁とか2桁表示にしているエディタでは、見た目滅茶苦茶になって可読性が非常に悪くなります。

混ぜることは出来ますが、基本、混ぜるな危険ということで。

ちなみにPythonにくっついてくるライブラリは4文字空白インデントになっています。特に規約で定める必要がなければ、それに合わせれば良いと思います。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-02-22 21:10:10
md5:1f90b6d14aa51fd7f0b6b6b0d33f35d3
sha1:a40e4284711858b1732cca420f04d5968a208ffe
コメント
コメントを投稿するにはログインして下さい。