小甲鱼Python学习笔记

生成器核心定位

  • 迭代器的一种简洁实现
  • 无需高级魔法方法、内核对象
  • 基于普通函数+yield语句实现

生成器存在的意义

  • 简化代码:替代迭代器的类定义与方法实现
  • 实现协同程序:函数可暂停/挂起,后续恢复执行

生成器 vs 普通函数

  • 普通函数:从第一句执行,结束于return/异常/语句执行完毕;调用结束局部变量销毁
  • 生成器函数:含yield语句;yield类似return但会暂停函数;下次调用从暂停处继续

生成器基础使用示例

  • 定义:函数内加yield语句(def my_gen(): print("执行"); yield 1; yield 2)
  • 调用:g = my_gen() → next(g)触发执行,暂停在对应yield处
  • 遍历:for循环自动调用next+捕获StopIteration异常

生成器实战:斐波那契数列

  • 特点:死循环结构但因yield暂停,不占用CPU
  • 实现:通过yield返回数列项,for循环控制输出100以内数值

推导式拓展:生成器推导式

  • 列表推导式:[i for i in range(100) if not i%2 and i%3] → 100内被2整除且不被3整除的数
  • 字典推导式:{i:i%2==0 for i in range(10)} → 0-9数字是否为偶数的字典
  • 集合推导式:{i for i in [1,1,2,3,4,4,5]} → 自动去重的集合
  • 生成器推导式:(i for i in range(10)) → 返回generator object;可next调用;作为函数参数可省略括号

课后学习建议

  • 阅读推荐文章:深入理解协同程序、生成器特征
  • 完成课后作业:自学新知识并实践