Python迭代器与可迭代与生成器
示例
一个迭代是一个对象,可以返回一个迭代器。具有状态且具有__iter__ 方法并返回迭代器的任何对象都是可迭代的。也可能是没有状态的对象,该对象实现了__getitem__方法。-该方法可以获取索引(从零开始),并IndexError在索引不再有效时引发。
Python的str类是__getitem__可迭代的示例。
一个迭代是当你调用产生序列中的下一个值的对象,next(*object*)一些对象。而且,任何带有__next__方法的对象都是迭代器。迭代StopIteration器用完之后会引发迭代器,并且此时不能重复使用。
迭代类:
可迭代的类定义__iter__和__next__方法。可迭代类的示例:
class MyIterable:def __iter__(self):
return self
def __next__(self):
#code
#旧版python中的经典可迭代对象__getitem__仍受支持...
class MySequence:
def __getitem__(self, index):
if (condition):
raise IndexError
return (item)
#可以通过使用iter(MySequence())产生一个普通的`iterator`实例
尝试实例化collections模块中的抽象类以更好地了解这一点。
例:
Python 2.x 2.3import collectionsPython 3.x 3.0>>> collections.Iterator()
>>> TypeError: Cant instantiate abstract class Iterator with abstract methods next
>>> TypeError: Cant instantiate abstract class Iterator with abstract methods __next__
通过执行以下操作来处理Python 2对Python 2中可迭代类的兼容性:
Python 2.x 2.3class MyIterable(object): #或collections.Iterator,我建议...。....
def __iter__(self):
return self
def next(self): #code
__next__ = next
这两个现在都是迭代器,可以循环通过:
ex1 = MyIterableClass()ex2 = MySequence()
for (item) in (ex1): #code
for (item) in (ex2): #code
生成器是创建迭代器的简单方法。生成器是迭代器,迭代器是可迭代的。
以上是 Python迭代器与可迭代与生成器 的全部内容, 来源链接: utcz.com/z/321287.html