首页 / PYTHON / Python中的迭代器和生成器
Python中的迭代器和生成器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的迭代器和生成器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1371字,纯文字阅读大概需要2分钟。
内容图文
前言
面试的时候总是被问到迭代器、生成器、装饰器,一开始不知道怎么回答,然后查阅资料之后总算是有点认识了。
迭代器
迭代器其实是一个实现了迭代器协议的容器对象。
它基于2个方法:
__next__
: 返回容器的下一个元素__iter__
: 返回迭代器本身
range()
函数就是一个迭代器
接下来我模拟range写一个迭代器
class Range:
def __init__(self, start : int = 0, end : int = 10, step : int = 1):
self.start = start
self.end = end
self.step = step
def __next__(self):
if self.start > (self.end - self.step):
raise StopIteration
self.start += self.step
return self.start
def __iter__(self):
return self
测试默认值:
>>> print([i for i in Range()])
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
测试非默认值,设置步长为3:
>>> print([i for i in Range(10, 50, 3)])
[13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]
可见Range
对象是一个可以迭代的对象
迭代器跟生成器一般是结合使用的。
生成器
基于yield
语句,生成器可以暂停当前执行的函数,返回yield
当前要返回的值,并保存上下文。
例如生成可以被3整除的数:
def divide_three():
a = 3
while True:
yield a
a += 3
测试:
>>> res = divide_three()
>>> print([next(res) for i in range(20)])
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60]
这里调用了20次,理论上,如果你愿意,可以调用无限次,是不是很神奇。
来看看divide_three
的类型:
>>> print(divide_three())
<generator object divide_three at 0x1116db550>
现在是不是对迭代器、生成器有点感觉了。
Enjoy your code, good luck.
内容总结
以上是互联网集市为您收集整理的Python中的迭代器和生成器全部内容,希望文章能够帮你解决Python中的迭代器和生成器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。