摘要:“为什么别人的代码优雅高效,而你的for循环又长又慢?”在Python中,for循环是每个开发者都会用的基础结构,但会用≠懂原理!今天,带你深入解剖for循环的底层逻辑,掌握迭代器、生成器、性能优化等硬核知识,让你的代码效率翻倍!
“为什么别人的代码优雅高效,而你的for循环又长又慢?”
在Python中,for循环是每个开发者都会用的基础结构,但会用≠懂原理!
今天,带你深入解剖for循环的底层逻辑,掌握迭代器、生成器、性能优化等硬核知识,让你的代码效率翻倍!
划重点:
• 可迭代对象:列表、字符串、字典……甚至文件!
• else的存在感极低,但面试可能会考哦!
• 特征:能用for循环遍历的都是它!
• 隐藏技能:必须实现__iter__方法(返回一个迭代器)。迭代器(iterator)
• 特征:实现__next__方法,像“一次性水杯”,用完就扔。
• 冷知识:迭代器自己也是可迭代对象!(套娃警告⚠️)
举个栗子:
# 手动模拟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}分")• 黑名单行为:在循环中修改正在遍历的列表!(可能导致元素跳过或重复)
✅ 正确姿势:遍历副本或新建列表。
让你的类支持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,5for num in [1,2,3]: if num == 2: breakelse: print("循环平安结束~") # 永远不会执行!你遇到过哪些for循环的坑? 欢迎在评论区吐槽!
如果觉得有用,记得转发给身边的程序员小伙伴哦!
来源:信息科技云课堂