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 循环等等。缩进表示一个代码块的开始,取消缩进表示代码块的结束。没有显式的花括号、方括号或关键字。这意味着空格非常重要,并且必须保持一致。在本例中,函数代码(包括 docstring)缩进了四个空格。它不一定是四个空格,只需要保持一致即可。第一个没有缩进的行表示该行代码在函数外部。

示例 2.6 “if 语句” 展示了带有 if 语句的代码缩进示例。

示例 2.6. if 语句


def fac(n):                   1
    print 'n =', n            2
    if n > 1:                 3
        return n * fac(n - 1)
    else:                     4
        print 'end of the line'
        return 1
1 这是一个名为 fac 的函数,它接受一个参数 n。函数内的所有代码都进行了缩进。
2 Python 中,打印到屏幕非常简单,只需使用 print 即可。print 语句可以接受任何数据类型,包括字符串、整数和其他原生类型,例如您将在下一章中学习的字典和列表。您甚至可以通过使用逗号分隔的值列表在一行中混合打印多个内容。每个值都打印在同一行,用空格分隔(逗号不打印)。因此,当使用 5 调用 fac 时,它将打印“n = 5”。
3 if 语句是一种代码块。如果 if 表达式计算结果为真,则执行缩进的代码块,否则将执行 else 代码块。
4 当然,ifelse 代码块可以包含多行代码,只要它们都缩进相同的数量即可。这个 else 代码块中有两行代码。多行代码块没有其他特殊语法。只需缩进并继续编写代码即可。

在最初的一些反对意见和对 Fortran 的一些讽刺类比之后,您将接受这一点并开始看到它的好处。一个主要的好处是所有 Python 程序看起来都类似,因为缩进是语言要求,而不是风格问题。这使得阅读和理解他人的 Python 代码变得更加容易。

Note
Python 使用回车符分隔语句,使用冒号和缩进分隔代码块。C++Java 使用分号分隔语句,使用花括号分隔代码块。

代码缩进的进一步阅读