Python3 循环语句详解
在 Python 3 中,循环语句是实现程序重复执行的核心机制,主要包括
for循环和while循环。本文将深入解析 Python 3 循环语句的核心特性、高级用法及最佳实践。
一、基础循环结构
1. for 循环
# 遍历列表
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit) # 依次输出:apple, banana, cherry
# 遍历字符串
for char in "hello":
print(char) # 依次输出:h, e, l, l, o
# 遍历字典(默认遍历键)
person = {'name': 'Alice', 'age': 30}
for key in person:
print(key, person[key]) # 输出:name Alice, age 30
2. while 循环
# 简单计数
count = 0
while count < 3:
print(count) # 输出:0, 1, 2
count += 1
# 条件循环
password = ""
while password != "secret":
password = input("请输入密码:")
print("密码正确!")
二、循环控制语句
1. break 语句
# 找到目标后提前退出
numbers = [1, 3, 5, 7, 8, 9]
for num in numbers:
if num % 2 == 0:
print(f"找到偶数:{num}") # 输出:找到偶数:8
break
else: # 循环未被break时执行
print("未找到偶数")
2. continue 语句
# 跳过特定元素
for num in range(5):
if num == 2:
continue # 跳过数字2
print(num) # 输出:0, 1, 3, 4
3. else 子句
# for循环正常结束时执行else
for i in range(3):
print(i)
else:
print("循环结束") # 输出:0, 1, 2, 循环结束
# while循环被break时不执行else
count = 0
while count < 3:
print(count)
if count == 1:
break
count += 1
else: # 不会执行
print("循环结束")
三、高级循环技术
1. range () 函数
# 生成指定范围的整数序列
for i in range(5):
print(i) # 输出:0, 1, 2, 3, 4
# 指定起始和结束值
for i in range(2, 6):
print(i) # 输出:2, 3, 4, 5
# 指定步长
for i in range(0, 10, 2):
print(i) # 输出:0, 2, 4, 6, 8
2. enumerate () 函数
# 同时获取索引和值
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"索引{index}:{fruit}") # 输出:索引0:apple, 索引1:banana, 索引2:cherry
# 指定起始索引
for index, char in enumerate("hello", 1):
print(f"位置{index}:{char}") # 输出:位置1:h, 位置2:e, ...
3. zip () 函数
# 并行遍历多个序列
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name}今年{age}岁") # 输出:Alice今年25岁, Bob今年30岁, Charlie今年35岁
# 处理不等长序列
a = [1, 2, 3]
b = ['a', 'b']
for x, y in zip(a, b):
print(x, y) # 输出:1 a, 2 b(以最短序列为准)
4. 嵌套循环
# 打印乘法表
for i in range(1, 4):
for j in range(1, 4):
print(f"{i}×{j}={i*j}", end="\t")
print() # 换行
# 输出:
# 1×1=1 1×2=2 1×3=3
# 2×1=2 2×2=4 2×3=6
# 3×1=3 3×2=6 3×3=9
四、循环与推导式
1. 列表推导式
# 生成平方数列表
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
# 带条件的列表推导式
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
# 嵌套列表展开
matrix = [[1, 2], [3, 4]]
flattened = [num for row in matrix for num in row] # [1, 2, 3, 4]
2. 字典推导式
# 生成字典
squares_dict = {x: x**2 for x in range(3)} # {0: 0, 1: 1, 2: 4}
# 交换键值对
original = {'a': 1, 'b': 2}
reversed_dict = {v: k for k, v in original.items()} # {1: 'a', 2: 'b'}
3. 集合推导式
# 生成集合(自动去重)
numbers = [1, 2, 2, 3, 3, 3]
unique_squares = {x**2 for x in numbers} # {1, 4, 9}
五、无限循环与安全退出
1. 无限循环模式
# 守护进程模式
while True:
try:
data = receive_data() # 获取数据
process(data) # 处理数据
except Exception as e:
print(f"处理异常:{e}")
finally:
cleanup() # 清理资源
2. 安全退出机制
# 通过用户输入控制退出
running = True
while running:
command = input("输入命令(q退出):")
if command == 'q':
running = False
else:
execute(command)
六、循环性能优化
1. 避免循环内低效操作
# 不推荐(每次循环都计算列表长度)
data = [1, 2, 3, 4, 5]
for i in range(len(data)):
print(data[i])
# 推荐(直接遍历元素)
for item in data:
print(item)
2. 使用生成器减少内存占用
# 生成器表达式(节省内存)
squares_gen = (x**2 for x in range(1000)) # 生成器对象
for num in squares_gen:
print(num)
# 列表推导式(占用更多内存)
squares_list = [x**2 for x in range(1000)] # 完整列表
七、常见陷阱与注意事项
1. 修改迭代中的序列
# 错误示例(修改列表会导致索引混乱)
numbers = [1, 2, 3, 4]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 结果:[1, 3](预期应为[1, 3, 4])
# 正确方式(使用副本)
for num in numbers.copy():
if num % 2 == 0:
numbers.remove(num)
2. 浮点数循环的精度问题
# 可能导致意外结果
x = 0.0
while x != 1.0:
x += 0.1
print(x) # 无限循环,因为浮点数精度问题
# 推荐方式(使用容差比较)
x = 0.0
while abs(x - 1.0) > 1e-9:
x += 0.1
print(x)
八、总结
Python 的循环机制提供了灵活且高效的迭代方式,掌握以下要点可编写出更健壮的代码:
- 使用
for循环遍历可迭代对象,while循环处理条件循环 - 利用
break和continue控制循环流程,合理使用else子句 - 通过
range()、enumerate()和zip()增强循环功能 - 使用推导式简化集合创建,注意生成器与列表的性能差异
- 避免在循环中修改迭代对象,注意浮点数比较的精度问题
合理运用循环语句是构建高效、可读 Python 程序的基础。
浙公网安备 33010602011771号