2.5. 代码缩进

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

例 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):                   1
    print 'n =', n            2
    if n > 1:                 3
        return n * fib(n - 1)
    else:                     4
        print 'end of the line'
        return 1
1 这是一个名为 fib 的函数, 有一个参数 n。在函数内的所有代码都是缩进的。
2 Python 中向屏幕输出内容非常容易, 只要使用 print 即可。 print 语句可以接受任何数据类型, 包括字符串, 整数和其它如字典和列表 (我们将在下一章学习) 等类型。甚至可以混在一起输出, 通过使用以逗号分隔的值列表把几个东西输出到一行上。每个值都输出到同一行, 通过空格隔开 (逗号并不打印出来) 。所以当用 5 来调用 fib 时, 将输出 "n = 5"。
3 if 语句是一种类型的代码块。如果 if 表达式计算为 true, 缩进块被执行, 否则进入 else 块执行。
4 当然 ifelse 块可以包含许多行, 只要它们都同样缩进。这个 else 块中有两行代码。对于多行代码块没有其它特殊的语法, 只要缩进就行了。

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

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

进一步阅读