抜粋翻訳: Python Reference Manual: Lexical analysis
「Pythonで長くなった行を折り返すのって難しくないの?」
「全然難しくないよ。オフィシャルのコーディングスタイルガイドで79文字以下にすることが推奨されているくらいだし」
「その時のインデントってどうすればいいの」
「え?そんなの自由だよ」
「え?そうなの?」
というやりとりがあったので翻訳
2. Lexical analysis — Python v2.7 documentation
http://docs.python.org/reference/lexical_analysis.html
論理行
論理行の終わりはNEWLINEトークンで表現される。文は、構文規則でNEWLINEトークンが許されている場所以外で論理行の境界をまたぐことはできない。論理行は1行以上の物理行で構成される。その構成は後述の明示的行継続ルールと暗黙的行継続ルールに従う。
(明示的行継続ルールってのは行末にバックスラッシュを置くと行がつながるってルールのことだ。翻訳はしない)
暗黙的行継続
括弧、波括弧、大括弧で囲われた式はバックスラッシュなしで複数の物理行に分けることが出来る。例:
month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year
継続行はコメントを持てる。継続行のインデントは重要ではない。空白の継続行は許される。暗黙の継続行の間にNEWLINEトークンはない。暗黙の継続行は後述の「三重引用符で囲われた文字列」の中にもできるが、こちらはコメントを持てない。
インデント
続く行のインデントレベルはスタックを使ってINDENT及びDEDENTトークンを作るのに使われる。
最初の行が読まれる前に、一つの0がスタックにプッシュされる。この0はポップされない。スタックにプッシュされた値は常にスタックの底からてっぺんに向けて増加する。各々の論理行が始まるときに、その行のインデントレベルがスタックトップと比較される。もし同じ値ならなにもしない。もしその行のインデントレベルのほうが大きいなら、その値をプッシュし、INDENTトークンが作られる。もし小さいなら、インデントレベルはスタックの中にある数値のどれかでなくてはならず、スタックの中の値でインデントレベルよりも大きな値はすべてポップされ、そのポップごとに一つのDEDENTトークンが作られる。ファイルの最後で、残っている0より大きな値の数だけDEDENTトークンが作られる。
さて、もうおわかりかと思うが、例えばこんなインデントも許される。
>>> if True: ... print (1 + ... 2) ... 3
Python的にはprintの次の行はprintの行の続きなので、print (1 + 2)って書いてあるのと変わらない。
そういうわけで、普通の神経の持ち主が「見やすくするためにレイアウトしたい」と思うシチュエーションでPythonのルールがじゃまになることはないと言っていいだろう。少なくとも頭のおかしい人間が正方形プログラミングなんてやってしまう程度にはフリーレイアウトである。西尾泰和のブログ: ワンライナーはダークサイド。改行をいれるべし