Python 循环控制语句
Python 循环控制语句
1. continue - 跳过本次循环
作用:跳过当前迭代的剩余代码,直接进入下一次循环
基本示例
for i in range(5):
if i == 2:
continue # 跳过 i=2 这次循环
print(i)
# 输出: 0, 1, 3, 4 (跳过了2)
在你的代码中
for bus_str, qubits in bus_qubits_map.items():
if self._check_skip_allocation(qubits):
pyqlog.info(f"Bus {bus_str}: Skip allocation")
continue # 跳过这个bus的分配,直接处理下一个bus
# 下面的分配代码不会执行
probe_power_list = []
# ... 后续分配逻辑
执行流程:
- 如果条件满足 → 打印日志 →
continue→ 跳到for开始处理下一个 bus - 如果条件不满足 → 继续执行下面的分配代码
2. break - 完全退出循环
作用:立即终止整个循环,不再执行任何迭代
基本示例
for i in range(10):
if i == 5:
break # 遇到5就停止整个循环
print(i)
# 输出: 0, 1, 2, 3, 4 (到5就停止了)
实际应用场景
# 查找第一个满足条件的元素
for qubit in qubits:
if qubit.probe_power > -20:
print(f"找到: {qubit.name}")
break # 找到就停止,不再继续找
print(f"检查: {qubit.name}")
# 如果第2个qubit满足条件,后面的qubit都不会检查
3. continue vs break 对比
# continue: 跳过本次,继续下一次
for i in range(5):
if i == 2:
continue
print(i)
# 输出: 0, 1, 3, 4
# break: 彻底结束循环
for i in range(5):
if i == 2:
break
print(i)
# 输出: 0, 1
| 语句 | 作用 | 循环是否继续 |
|---|---|---|
continue | 跳过本次迭代的剩余代码 | ✅ 继续下一次迭代 |
break | 终止整个循环 | ❌ 立即退出 |
4. 嵌套循环中的表现
continue 只影响最内层循环
for i in range(3):
for j in range(3):
if j == 1:
continue # 只跳过内层的 j=1
print(f"i={i}, j={j}")
# 输出:
# i=0, j=0
# i=0, j=2
# i=1, j=0
# i=1, j=2
# i=2, j=0
# i=2, j=2
break 只退出最内层循环
for i in range(3):
for j in range(3):
if j == 1:
break # 只退出内层循环
print(f"i={i}, j={j}")
print(f"外层 i={i} 继续")
# 输出:
# i=0, j=0
# 外层 i=0 继续
# i=1, j=0
# 外层 i=1 继续
# i=2, j=0
# 外层 i=2 继续
5. 其他跳出循环的方式
5.1 return - 退出整个函数
def find_qubit(qubits, target_power):
for qubit in qubits:
if qubit.probe_power == target_power:
return qubit # 找到就立即返回,函数结束
return None # 没找到
# return 会:
# 1. 退出循环
# 2. 退出函数
# 3. 返回值
5.2 异常处理
try:
for i in range(100):
if i == 10:
raise StopIteration # 抛出异常来停止
print(i)
except StopIteration:
print("循环被异常终止")
5.3 循环标志变量
found = False
for bus_str, qubits in bus_qubits_map.items():
for qubit in qubits:
if qubit.probe_power > threshold:
found = True
break # 退出内层循环
if found:
break # 退出外层循环
5.4 else 子句(特殊用法)
for i in range(5):
if i == 10:
break
print(i)
else:
# 只有循环正常结束(没有break)才会执行
print("循环正常完成")
# 输出: 0, 1, 2, 3, 4, "循环正常完成"
6. 在你的代码中的最佳实践
def _divide_same_bus_read_amp(self):
bus_qubits_map = defaultdict(list)
for qubit in self.run_options.pass_unit_objs:
bus_qubits_map[str(qubit.inst.bus)].append(qubit)
for bus_str, qubits in bus_qubits_map.items():
# 早期退出模式 - 使用 continue
if self._check_skip_allocation(qubits):
pyqlog.info(f"Bus {bus_str}: Skip allocation")
continue # ✅ 清晰表达"跳过这个bus"
# 只有不满足条件的bus才会执行下面的代码
# ... 复杂的分配逻辑
为什么用 continue 而不是 break:
- ✅
continue:处理完这个bus,继续处理其他bus - ❌
break:只处理第一个不满足条件的bus,后面的都不处理了
7. 性能提示
避免不必要的循环
# ❌ 不好的写法
skip = False
if condition:
skip = True
if not skip:
# 大量代码...
# ✅ 好的写法
if condition:
continue # 或 return
# 大量代码...
合理使用可以提高可读性
# ❌ 难读
for item in items:
if not should_skip(item):
if is_valid(item):
if has_permission(item):
process(item)
# ✅ 清晰
for item in items:
if should_skip(item):
continue
if not is_valid(item):
continue
if not has_permission(item):
continue
process(item) # 主要逻辑