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循环处理条件循环
  • 利用breakcontinue控制循环流程,合理使用else子句
  • 通过range()enumerate()zip()增强循环功能
  • 使用推导式简化集合创建,注意生成器与列表的性能差异
  • 避免在循环中修改迭代对象,注意浮点数比较的精度问题

合理运用循环语句是构建高效、可读 Python 程序的基础。

posted on 2025-06-30 09:56  小陶coding  阅读(220)  评论(0)    收藏  举报