更新时间:作者:小小条
“为什么别人的代码优雅高效,而你的for循环又长又慢?”
在Python中,for循环是每个开发者都会用的基础结构,但会用≠懂原理!
今天,带你深入解剖for循环的底层逻辑,掌握迭代器、生成器、性能优化等硬核知识,让你的代码效率翻倍!

for 临时变量 in 可迭代对象: # 干活代码else: # 没人用的冷门知识:循环没被break时执行这里
划重点:
• 可迭代对象:列表、字符串、字典……甚至文件!
• else的存在感极低,但面试可能会考哦!
举个栗子:
# 手动模拟for循环的底层操作data = [1,2,3]iterator = iter(data) # 召唤迭代器while True: try: print(next(iterator)) # 疯狂抓取下一个元素 except StopIteration: # 抓到头了就溜 break
生成器(Generator)是懒人版迭代器,用yield动态生成值,省内存神器!
def 无限计数器(): num = 0 while True: yield num num += 1# 用法和普通for循环一模一样!for n in 无限计数器(): if n > 5: break print(n) # 输出0,1,2,3,4,5
适用场景:处理超大文件、流式数据时,生成器能让内存感激涕零!
1、遍历字典:
d = {"A": 1, "B": 2} for key in d: # 遍历键 for val in d.values(): # 遍历值 for k, v in d.items(): # 键值对一起拿捏
2、带索引遍历:用enumerate获取序号!
for idx, value in enumerate(["苹果", "华为"]): print(f"第{idx}个手机品牌:{value}")
3、 多列表并行:zip像拉链一样合并数据!
names = ["小明", "小红"] scores = [90, 85] for name, score in zip(names, scores): print(f"{name}考了{score}分")
• 黑名单行为:在循环中修改正在遍历的列表!(可能导致元素跳过或重复)
✅ 正确姿势:遍历副本或新建列表。
• 替代方案:
• 列表推导式:[x**2 for x in range(10)](简洁高效)
• 内置函数:map()、filter()比手动循环更快!
让你的类支持for循环,只需实现__iter__()和__next__()!
class 自定义计数器: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self # 我自己就是迭代器! def __next__(self): if self.current > self.end: raise StopIteration else: self.current += 1 return self.current - 1# 使用效果和普通for循环完全一致!for num in 自定义计数器(1, 5): print(num) # 输出1,2,3,4,5
• break:立刻结束循环(连else也不执行!)
• else:只有循环自然死亡时才会触发!(被break干掉的不算)
for num in [1,2,3]: if num == 2: breakelse: print("循环平安结束~") # 永远不会执行!
你遇到过哪些for循环的坑? 欢迎在评论区吐槽!
如果觉得有用,记得转发给身边的程序员小伙伴哦!
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除