Python 用缩进层级表示代码块从属关系,而不像 C 语言或 Java 那样用大括号包裹语句组。若缩进不一致或与块起始行不对齐,解释器将抛出 IndentationError。本节说明语句与换行规则、缩进约定、注释与文档字符串(docstring)的写法,便于在后续学习条件与循环时减少结构性错误。

语句(Statement)

解释器按顺序执行的一条指令称为语句。赋值、if、for、while 等均属于语句,例如:

a = 1          # 赋值语句
if a > 0:      # if 语句
    print(a)   # 缩进内的部分属于 if

通常一条语句独占一行;换行即表示该语句结束。若将多条语句写在同一行,可用分号分隔,但可读性较差,一般不建议:

a = 1; b = 2; c = 3

多行语句

表达式过长时,可在行尾加反斜杠 \,在下一行继续书写同一条语句:

total = 1 + 2 + 3 + \
        4 + 5 + 6

更常见的做法是隐式换行:只要仍在圆括号、方括号或花括号内部,可直接换行而无需反斜杠:

total = (1 + 2 + 3 +
         4 + 5 + 6)

colors = ['red',
          'blue',
          'green']

缩进与代码块

C 语言与 Java 用 {} 界定代码块;Python 则用缩进:从多缩进一层的位置开始,直到缩进回到外层为止,中间语句均属于同一块:

if True:
    print('Hello')   # 属于 if
    a = 5            # 属于 if
print('世界')         # 缩进与 if 同级,不属于 if

每一缩进层级可用若干空格或 Tab 表示,但同一代码块内必须统一。空格与 Tab 混用、或同一层级宽度不一致,均可能触发 IndentationError。社区约定为一层缩进使用 4 个空格,并尽量避免 Tab。

注释(Comment)

注释供阅读源码的人参考,解释器会忽略注释内容。单行注释以 # 开头,从该符号到行尾均为注释:

# 这是一个注释
print('Hello')   # 行尾注释

多行说明可连续使用多个以 # 开头的行:

# 这是一个长注释
# 它延伸到了多行

也有人用三引号字符串充当多行说明。它并非注释语法,而是未绑定到变量的字符串字面量,运行时会被丢弃,效果上类似被忽略的说明文字:

"""
这也是一个
多行注释
"""

文档字符串(Docstring)

在函数、类或模块定义体开头书写的三引号字符串称为文档字符串(docstring),可通过 .__doc__ 读取:

def double(num):
    """函数使值翻倍"""
    return 2 * num

print(double.__doc__)   # 输出: 函数使值翻倍

为公开接口编写 docstring 有助于他人理解用途,IDE 与文档生成工具也可自动提取。

编写时的检查项

  • 同一代码块内缩进是否一致(建议统一为 4 个空格)?
  • if / for / while 行末冒号之后,块内语句是否已缩进?
  • 长表达式是否用括号包裹以便自然换行?
  • 非显然的逻辑是否配有注释或 docstring?

本节说明了 Python 的语句形式、缩进块、注释与 docstring。下一节介绍变量:命名规则、赋值方式与字面量。