Python学习笔记之迭代器和生成器用法实例详解
Python  /  管理员 发布于 7年前   217
本文实例讲述了Python学习笔记之迭代器和生成器用法。分享给大家供大家参考,具体如下:
迭代器和生成器
迭代器
生成器
下面是一个叫做 my_range 的生成器函数,它会生成一个从 0 到 (x - 1) 的数字流:
def my_range(x): i = 0 while i < x: yield i i += 1
该函数使用了 yield 而不是关键字 return。这样使函数能够一次返回一个值,并且每次被调用时都从停下的位置继续。关键字 yield
是将生成器与普通函数区分开来的依据。
因为上述代码会返回一个迭代器,因此我们可以将其转换为列表或用 for 循环遍历它,以查看其内容。例如,下面的代码:
for x in my_range(5): print(x)
输出如下:
0
1
2
3
4
为何要使用生成器?
迭代器和生成器[相关练习]
请自己写一个效果和内置函数 enumerate 一样的生成器函数。如下所示地调用该函数:
lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"]for i, lesson in my_enumerate(lessons, 1): print("Lesson {}: {}".format(i, lesson))
应该会输出:
Lesson 1: Why Python Programming
Lesson 2: Data Types and Operators
Lesson 3: Control Flow
Lesson 4: Functions
Lesson 5: Scripting
解决方案:
lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"]def my_enumerate(iterable, start=0): # Implement your generator function here i = start for element in iterable: yield i, element i += 1for i, lesson in my_enumerate(lessons, 1): print("Lesson {}: {}".format(i, lesson))
如果可迭代对象太大,无法完整地存储在内存中(例如处理大型文件时),每次能够使用一部分很有用。实现一个生成器函数 chunker,接受一个可迭代对象并每次生成指定大小的部分数据。如下所示地调用该函数:
for chunk in chunker(range(25), 4): print(list(chunk))
应该会输出:
[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]
[12, 13, 14, 15]
[16, 17, 18, 19]
[20, 21, 22, 23]
[24]
解决方案:
def chunker(iterable, size): for i in range(0, len(iterable), size): yield iterable[i:i + size]for chunk in chunker(range(25), 4): print(list(chunk))
学习参考:
https://www.python.org/dev/peps/pep-0257/
https://docs.python.org/3/tutorial/classes.html#iterators
https://softwareengineering.stackexchange.com/questions/290231/when-should-i-use-a-generator-and-when-a-list-in-python/290235
https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号