【无标题】

Python神技:彻底搞懂for循环的8个核心要点!

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


一、从零开始:for循环的“标准姿势”

for 临时变量 in 可迭代对象:
    # 干活代码
else:
    # 没人用的冷门知识:循环没被break时执行这里

👉 划重点
可迭代对象:列表、字符串、字典……甚至文件!
else的存在感极低,但面试可能会考哦!


二、灵魂拷问:可迭代对象 vs 迭代器,到底啥区别?

  1. 可迭代对象(Iterable)
    特征:能用for循环遍历的都是它!
    隐藏技能:必须实现__iter__()方法(返回一个迭代器)。

  2. 迭代器(Iterator)
    特征:实现__next__()方法,像“一次性水杯”,用完就扔。
    冷知识:迭代器自己也是可迭代对象!(套娃警告⚠️)

💡 举个栗子

# 手动模拟for循环的底层操作
data = [1,2,3]
iterator = iter(data)  # 召唤迭代器
while True:
    try:
        print(next(iterator))  # 疯狂抓取下一个元素
    except StopIteration:      # 抓到头了就溜
        break

三、for循环的“高速引擎”:生成器

生成器(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

👉 适用场景:处理超大文件、流式数据时,生成器能让内存感激涕零!

四、打工人必备:for循环的8种搬砖姿势

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()比手动循环更快!


六、装X必备:自定义可迭代对象

让你的类支持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

break:立刻结束循环(连else也不执行!)
else:只有循环自然死亡时才会触发!(被break干掉的不算)

for num in [1,2,3]:
    if num == 2:
        break
else:
    print("循环平安结束~")  # 永远不会执行!

你遇到过哪些for循环的坑? 欢迎在评论区吐槽!
如果觉得有用,记得转发给身边的程序员小伙伴哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息科技云课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值