写过 C 语言或 Java 的人,第一反应往往是去找大括号,而 Python 语言不靠花括号圈代码块,而是用缩进层级来表示从属关系。缩进一旦对不齐,解释器就会抛出 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每个缩进层级用几个空格可以自己定,但同一代码块里必须统一,空格和 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?