Python:Iterable和Iterator
转于:https://blog.csdn.net/whgqgq/article/details/63685066
博主:gongqi1992
iterable和iterator最基本的区别:
iterable是一个迭代器对象,包含一个__iter__或__getitem__方法,__iter__方法会返回一个iterator对象。通常可以使用isinstance(e,collection.Iterable)
方法判断一个对象e是否是可迭代的。__iter__方法需要返回一个iterator,也就是说这个方法需要被重写。例如:
class AIterable:
def __iter__(self):
return iter([1, 2, 3])
it = AIterable()
for i in it:
print("current item is: " + str(i))
运行结果为: current item is: 1
current item is: 2
current item is: 3
定义了一个iterable类,这个类含有一个__iter__方法,并且这个方法返回一个iterator。
*注:iter是Python的build-in函数,返回一个iterator。
iterator是一个可迭代对象。该对象的类必须实现next(Python2.x)或__next__(python3.x)方法。例如:
class AIterator:
def __init__(self, s, e):
self.current = s
self.end = e
def __iter__(self):
return self
def __next__(self):
if self.current < self.end:
self.index = self.current
self.current += 1
return self.index
else:
raise StopIteration
it = AIterator(1,10)
for i in it:
print(i,end=' ')
运行结果为:
1 2 3 4 5 6 7 8 9
由此可见,当调用for…in循环时,当in后面的对象是一个iterator时,则运行next()方法直到遇到StopIteration异常。同样,对于iterable对象,则先调用__iter__方法返回一个iterator,执行之前的操作步骤即可。
for…in语句的等价实现:
for i in [1,2,3,4,5]:
print(i,end=' ')
运行结果:1 2 3 4 5
上述代码等价于:
it = iter([1,2,3,4,5])
while True:
try:
print(next(it),end=' ')
except StopIteration:
break;
运行结果:1 2 3 4 5
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决