2.6 代码缩进和代码块

代码逻辑的组织需要有清晰的边界,不同的编程语言用不同的方式来划分代码块的边界,比如在Java/C#/C++中,最常见的是用花括号。


// Java/C++ way of grouping code blocks
if (enough_money) {
    buyHouse();
    buyCar("Toyota");
    buyCar("Ferrari");
}

Python的设计更加简洁,用代码行的缩进(indentation)来进行代码块边界的划分。


if enough_money:
    buy_house()
    buy_car('Toyota')
    buy_car('Ferrari')

如果缩进出错,可能导致意外的结果,如下面的代码所示。


if enough_money:
    buy_house()
    buy_car('Toyota')

buy_car('Ferrari')

Python的代码缩进可以用Tab,也可以用空格,但是两者不能混用。因为很多代码编辑器里允许用户指定Tab等价于几个空格,也就是说,一个Tab到底等于几个空格其实是可以配置的。这样的话,同一份代码在不同的编辑器里可能会解析成不同的代码逻辑,这是不可接受的。

代码块可以嵌套,代码的层次关系仍然是依靠缩进来控制的。


if enough_money:
    buy_house()

    if low_profile:
        buy_car('Toyota')
    else:
        buy_car('Ferrari')

在写Python判断语句的时候,有不少程序员会不自觉地加上括号。


if (age < 20):
    print('too young to get married!')

这通常是因为程序员有其他语言(比如Java)的编程经验,并且把其他语言的编程习惯带到Python代码中来了。这么做没有语法错误,Python接受但不建议这样的代码风格。这里出现的括号增加了字数,但是并没有为代码功能或者可读性做出贡献,应该避免:


if age < 20:
    print('too young to get married!')