
Python生成器实现及yield关键字
进一步理解
发布日期:2021-05-12 20:11:36
浏览次数:21
分类:精选文章
本文共 1513 字,大约阅读时间需要 5 分钟。
Python生成器实现及yield关键字
生成器的重要性
生成器是一种特殊的迭代器,在Python中,它比普通迭代器更为高效和优雅。生成器可以在迭代过程中动态生成数据,这使其在处理大量数据或动态内容时非常有用。
1. 使用推导式创建生成器
创建生成器的最简单方法是将列表推导式的方括号改为圆括号。例如:
list_a = [a ** 2 for a in range(6)]genera_a = (a ** 2 for a in range(6))
list_a
是一个普通的列表。genera_a
是一个生成器对象。
示例代码
list_a = [a ** 2 for a in range(6)]genera_a = (a ** 2 for a in range(6))print(list_a)print(type(genera_a))for num in genera_a: print(num)
运行结果
[0, 1, 4, 9, 16, 25]01491625
生成器的优势在于,它可以在迭代过程中逐步生成每个元素,而不需要一次性生成所有元素。这特别适用于处理大量数据或依赖于上一次迭代结果的数据生成场景。
2. 使用函数和yield关键字创建生成器
要创建一个生成器,还可以使用函数并在函数体内使用 yield
关键字。函数的一次调用返回的是一个生成器对象,可以通过 next()
方法或 for
循环迭代使用。
示例代码
def fib_generator(n): num1, num2 = 0, 1 for _ in range(n): yield num1 num1, num2 = num2, num1 + num2fib_gen = fib_generator(10)print(fib_gen)for num in fib_gen: print(num)
运行结果
0112358132134
生成器的工作原理
yield
关键字类似于函数的返回,但它会暂停当前函数的执行,返回值被传给调用者。- 每次调用
next()
或迭代器下一步,生成器会从断点(即yield
语句的位置)开始继续执行。
进一步理解 yield
和 send()
方法
yield
和 send()
方法可以一起使用来控制生成器的执行:
yield
传递当前迭代值给调用者,并暂停生成器。send()
允许传递额外的数据到生成器,结合yield
Statement 的后面,可以实现更复杂的数据交互。
示例代码
def genera_func(): for i in range(6): arg = yield i print(arg)g = genera_func()print(next(g)) # 0print(g.send('hello')) # arg = 'hello'print(next(g)) # 1
运行结果
0hello1
生成器在 yield
语句后可以接收额外的数据,这对于某些动态交互场景非常有用。
总结
生成器通过 yield
关键字对迭代器行为进行优化,实现更灵活的数据生成。这包括逐次生成数据和处理状态信息。在编写迭代器时,理解生成器的优势以及如何通过函数和 yield
关键字构建生成器是非常重要的。通过实际应用和练习,您可以更深入地掌握生成器的用途和特性。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月05日 16时32分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Explore Optimization
2019-03-07
Kali Linux 内网渗透教程 - ARP欺骗攻击 | 超详细
2019-03-07
2020Java程序设计基础(华东交通大学)章节测试免费满分答案
2019-03-07
小程序之wx:request(转)
2019-03-07
解决数据库报ORA-02289:序列不存在错误
2019-03-07
map[]和map.at()取值之间的区别
2019-03-08
成功解决升级virtualenv报错问题
2019-03-08
【SQLI-Lab】靶场搭建
2019-03-08
Xception 设计进化
2019-03-08
【Bootstrap5】精细学习记录
2019-03-08
LeetCode197.打家劫舍
2019-03-08
A simple problem HDU-2522 【数学技巧】
2019-03-08
Struts2-从值栈获取list集合数据(三种方式)
2019-03-08
vscode中快速生成vue模板
2019-03-08
参考图像
2019-03-09
设计模式(18)——中介者模式
2019-03-09
用JavaScript实现希尔排序
2019-03-09