查看全课大纲(第 4 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
行与缩进到底有什么用?
约 11 分钟
小象实战讲义 · Python 编程从入门到实践
欢迎来到 Python 编程基础语法的学习。在上一节,我们初步认识了 Python 的代码。这一节,我们将聚焦于 Python 代码的物理结构——行与缩进。这是 Python 区别于许多其他编程语言(如 Java、C)的核心特征之一。理解并正确使用缩进,是写出合法且可读 Python 代码的第一步。本节内容将直接服务于后续所有关于控制流(如 if、for)和函数定义的章节。
💡 核心导读
- 缩进即语法:Python 使用缩进来标识代码块,而不是大括号
{}。缩进是语法的一部分,而不仅仅是排版。 - 一致性要求:同一个代码块内的所有语句必须保持相同的缩进级别(空格数)。
- 行连接:当一行代码过长时,可以使用反斜杠
\将其连接至下一行。 - 空行的作用:空行不影响代码执行,但用于分隔逻辑上不同的代码块,是提升代码可读性的良好习惯。
缩进:Python 的代码块标识符
在 Java 或 C 语言中,代码块通常由大括号 {} 包裹。程序员在括号内进行缩进,主要是为了方便人类阅读,编译器并不关心这些空格或制表符。
# 这是一个 Python 函数定义的示例
def big_num(now):
if now > 10:
print("Big Number!")
else:
print("Small Number!")在 Python 中,情况完全不同。缩进本身就是语法的一部分。Python 解释器通过语句前的空格(或制表符)来识别哪些语句属于同一个逻辑块。
def big_num(now):这一行定义了一个函数。紧随其后的、缩进了一级的所有语句(直到缩进恢复)共同构成了这个函数的函数体。- 在函数体内,
if now > 10:是一个条件判断。它下面再次缩进一级的print("Big Number!")语句,构成了仅在条件为真时才执行的代码块。 - 同样,
else:下面的print("Small Number!")也构成了一个独立的代码块。
如果没有正确的缩进,Python 解释器将无法理解代码的逻辑结构,并会报错。
缩进的一致性规则
缩进使用的空格数量可以是 2 个、4 个或 1 个制表符(Tab),这由个人或团队的编码风格决定。但有一条铁律必须遵守:
同一个代码块内的所有语句,必须使用完全相同数量的空格(或制表符)进行缩进。
让我们看一个需要执行多条语句的代码块例子:
def check_number(num):
if num % 2 == 0: # 如果数字是偶数
print("{} 是偶数".format(num))
square = num * num # 计算它的平方
print("它的平方是 {}".format(square))
check_number(4)4 是偶数
它的平方是 16在上面 if 语句的代码块中,两条 print 语句和一条赋值语句都使用了相同的缩进(比如都是 4 个空格),因此它们被识别为同一个代码块,会在条件满足时按顺序全部执行。调用 check_number(4) 时,条件成立,所以两行输出都会出现。
如果缩进不一致,会发生什么呢?
# 错误写法示例:缩进不一致
def check_number_wrong(num):
if num % 2 == 0:
print("{} 是偶数".format(num)) # 假设这里缩进4个空格
square = num * num # 这里不小心多打了空格(比如6个)
print("它的平方是 {}".format(square))运行上面的错误代码,Python 解释器会立即报错:IndentationError: unexpected indent。它明确告诉你,在 square = num * num 这一行发现了意外的、不一致的缩进,程序无法继续执行。
行的连接与分割
多行语句
通常,Python 中一条语句写在一行内。但如果语句过长,为了便于阅读,可以将其分成多行书写。这时,需要在要换行的位置加上一个反斜杠 \。
# 使用反斜杠连接多行,将一条长计算语句分成两行
total = 1 + 2 + \
3 + 4
print(total)10如果不加反斜杠直接换行,Python 会认为第一行是一条不完整的语句,从而引发语法错误。
# 错误写法示例:未使用反斜杠直接换行
total = 1 + 2 +
3 + 4
# 运行会报错:SyntaxError: invalid syntax空行
空行(即不包含任何字符,只包含换行符的行)在 Python 中不会影响代码的执行。它的作用是在视觉上分隔逻辑上不同的代码块,从而极大地提高代码的可读性和可维护性。
# 第一部分:读入一个数字
now = 15
# 这里用一个空行分隔,表示下面开始新的逻辑功能
# 第二部分:数字大于 10 时打印提示,并给变量加二
if now > 10:
print("Big Number!")
now = now + 2
# 又一个空行
# 第三部分:打印加二之后的结果
print(now)Big Number!
17养成在不同功能模块间插入空行的习惯,能让你的代码结构更清晰,无论是自己日后回顾,还是与他人协作,都会更加方便。
📝 动手练一练
- 修复缩进错误:下面的代码意图是判断一个数是否为正数,如果是,则打印该数及其相反数。但它的缩进有误,请指出错误并写出正确版本。
def check_positive(x): if x > 0: print("{} 是正数".format(x)) opposite = -x print("它的相反数是 {}".format(opposite))
👉 点击查看参考答案
错误分析:函数体(def 下面的所有语句)没有进行缩进。同时,if 代码块内的第一条 print 语句也没有正确缩进。
正确写法:函数体和 if 代码块内的所有语句都需要进行统一且一致的缩进。
def check_positive(x):
if x > 0:
print("{} 是正数".format(x))
opposite = -x
print("它的相反数是 {}".format(opposite))
# 测试
check_positive(5)5 是正数
它的相反数是 -5常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
if x > 0:print("正数")print("执行") | IndentationError: expected an indented block after 'if' statement on line 1 | 第二行属于 if 代码块但未缩进,解释器在需要缩进的位置看到了顶格语句。 | if x > 0:print("正数")print("执行") |
total = 1 + 2 +3 + 4 | SyntaxError: invalid syntax | 在第一行末尾直接换行,Python 认为表达式不完整。 | total = 1 + 2 + \3 + 4 |
小结
- Python 使用缩进来定义代码块(如函数体、循环体、条件分支),这是其核心语法规则。
- 同一代码块内的所有语句必须保持完全一致的缩进量(空格数或制表符数),否则会引发
IndentationError。 - 当单行语句过长时,可在换行处使用反斜杠
\进行连接。 - 空行不影响程序执行,但用于分隔逻辑上独立的代码段,是重要的代码风格规范,能显著提升可读性。
📋 行动清单
- 在编辑器中输入本节的所有示例代码,并运行验证结果。
- 故意制造一次
IndentationError(如将同一代码块的两行设为不同缩进),观察解释器的报错信息。 - 尝试将一段较长的
print语句用反斜杠\分成两行书写,并成功运行。
—— 小象教研组