2.5. 代码缩进
Description: Python from novice to pro
Keywords: Python, Dive Into Python, tutorial, object-oriented, programming, documentation, book, free

# 深入 Python :Dive Into Python 中文版 Python 从新手到专家 [Dip_5.4b_CPyUG_Release] | Find:

## 2.5. 代码缩进

Python 函数没有明显的 `begin` 和 `end`，没有标明函数的开始和结束的花括号。唯一的分隔符是一个冒号 (`:`)，接着代码本身是缩进的。

### 例 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 个，只要一致就可以了。没有缩进的第一行则被视为在函数体之外。

例 2.6 “if 语句” 展示了一个 `if` 语句缩进的例子。

### 例 2.6. `if` 语句

    def fib(n):
        print 'n =', n
        if n > 1:
            return n * fib(n - 1)
        else:
            print 'end of the line'
            return 1

| 这是一个名为 `fib` 的函数，有一个参数 `n`。在函数内的所有代码都是缩进的。
| 在 Python 中向屏幕输出内容非常容易，只要使用 `print` 即可。`print` 语句可以接受任何数据类型，包括字符串、整数和其它类型，如字典和列表 (我们将在下一章学习)。甚至可以混在一起输出，只需用逗号隔开。所有值都输出到同一行，用空格隔开 (逗号并不打印出来)。所以当用 `5` 来调用 `fib` 时，将输出“n = 5”。
| `if` 语句是一种的代码块。如果 `if` 表达式计算为 true，紧跟着的缩进块会被执行，否则进入 `else` 块执行。
| 当然 `if` 和 `else` 块可以包含许多行，只要它们都同样缩进。这个 `else` 块中有两行代码。对于多行代码块没有其它特殊的语法，只要缩进就行了。

在经过一些最初的抗议和几个与 Fortran 的嘲讽的类比之后，您会心平气和地对待代码缩进，并且开始看到它的好处。一个主要的好处就是所有的 Python 程序看上去都差不多，因为缩进是一种语言的要求而不是一种风格。这样就使得阅读和理解他人的 Python 代码容易得多。

Python 使用硬回车来分割语句，冒号和缩进来分割代码块。C++ 和 Java 使用分号来分割语句，花括号来分割代码块。

### 进一步阅读

- Python Reference Manual 讨论了交叉缩进问题，并且演示了各种各样的缩进错误。
- Python Style Guide 讨论了良好的缩进风格。