第3章:语句与语法(Statements and Syntax)
一、导读
1.1 本章学习目标
第3章深入讲解 Python 的语句和语法结构。Python 使用缩进来组织代码,这是其最显著的特征之一。
1.2 为什么第三章如此重要
理解 Python 的语句结构和语法特性,是写出 Pythonic 代码的基础。
1.3 核心问题引导
Python 的缩进规则是什么?
列表推导式如何使用?
异常处理的语法是什么?
with 语句的作用是什么?
二、核心概念详解
3.1 缩进
python
# Python 使用缩进代替大括号
if x > 0:
print("positive")
elif x == 0:
print("zero")
else:
print("negative")
# 缩进必须一致(通常 4 个空格)
def function():
if True:
print("hello") # 4 个空格
# 不能混用 Tab 和空格3.2 列表推导式
python
# 基本形式
squares = [x**2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件
evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 嵌套
matrix = [[i*j for j in range(4)] for i in range(3)]
# [[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]
# 字典推导式
squares_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 集合推导式
unique_lengths = {len(word) for word in ["hello", "world", "hi"]}
# {2, 5}3.3 异常处理
python
# try/except/else/finally
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
except (TypeError, ValueError):
print("Type or value error")
else:
print("No error") # 没有异常时执行
finally:
print("Always executed") # 总是执行
# 抛出异常
raise ValueError("Invalid value")
# 自定义异常
class MyError(Exception):
def __init__(self, message, code):
super().__init__(message)
self.code = code
raise MyError("Something went wrong", 500)3.4 with 语句
python
# with 语句自动管理资源
with open("file.txt", "r") as f:
content = f.read()
# 文件自动关闭
# 自定义上下文管理器
class Timer:
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.elapsed = time.time() - self.start
print(f"Elapsed: {self.elapsed:.2f}s")
with Timer():
time.sleep(1)三、实战案例
3.1 数据处理管道
python
def process_data(data):
# 列表推导式链式处理
result = [
item.strip().lower()
for item in data
if item and len(item) > 3
]
return result
data = [" Hello ", "Hi", "", "World", " Python "]
print(process_data(data)) # ['hello', 'world', 'python']四、本章小结
Python 使用缩进组织代码,列表推导式提供简洁的数据转换,异常处理使用 try/except,with 语句自动管理资源。
五、思考与练习
Python 的缩进规则是什么?
列表推导式比 for 循环好在哪里?
异常处理的 else 和 finally 有什么区别?
with 语句的原理是什么?
如何编写自定义上下文管理器?