2.5. コードのインデント

Python の関数はコードの始まりと終わりを示すための明示的な beginend や波括弧を持ちません. 区切り文字はコロン (:) とコードそのもののインデントです.

Example 2.5. buildConnectionString 関数のインデント付け


def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.

    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

コードブロックはインデントによって定義されます. 「コードブロック」というのは, 関数, if 文, for ループ, while ループなどなどについて言っています. インデントを付けることでブロックを開始し, インデントを解除することで終了します. 明示的な括弧やキーワードはありません. ということは, ホワイトスペース (空白類) が重要で, 首尾一貫していなければなりません. この例では, 関数のコードは (doc string を含めて) 4 つのスペースでインデントされています. 4 つのスペースである必要はありませんが, インデント幅は首尾一貫している必要があります. インデントされていない最初の行は関数の一部ではありません.

Example 2.6, “if 文”if 文を使ったコードのインデントの例です.

Example 2.6. if


def fib(n):                   1
    print 'n =', n            2
    if n > 1:                 3
        return n * fib(n - 1)
    else:                     4
        print 'end of the line'
        return 1
1 これは n という引数を 1 つ取る fib という名前の関数です. 関数内部のコードは全てインデントされています.
2 画面に文字を表示するのは Python では非常に簡単です. print を使えばいいだけです. print 文は, 文字列や整数や次の章で習う辞書やリストのような他の組み込み型といった, どんなデータ型も引数に取れます. カンマ区切りで値を並べることで, 1 行に複数種類のものも混ぜることもできます. それぞれの値は 1 行にスペース区切りで (カンマは表示されずに) 出力されます. なので, fib5 を引数として呼び出された場合には, "n = 5" を出力します.
3 if 文はコードブロックの一種です. if 式が真と評価されたら, インデントされたコードブロックが実行され, そうでなければ else ブロックへ行きます.
4 もちろん if ブロックや else ブロックは, 全てのインデント幅を揃えることで複数行書くことができます. この else ブロックには 2 行コードがあります. 複数行コードブロックにはそれ以上の特別な文法はありません. ただインデントするだけです.

最初のうちは拒否感を持ったり Fortran に似ていて嫌だと勘違いしたりするかもしれませんが, そのうちに馴染んで利点が分かるようになります. 1 つの大きな利点は, インデントをコードスタイルではなく言語仕様にしてしまうことで, 全ての Python プログラムが似通って見えることです. このおかげで他人の Python コードが読んで理解しやすくなります.

Note
Python は改行 (carriage return) を文の区切りに使い, コロンとインデント付けをコードブロックの区切りに使います. C++Java はセミコロンを文の区切りに使い, 波括弧をコードブロックの区切りに使います.

コードのインデント付けについてさらに知るには