Python 迭代器和 生成器

一直覺得 Python 的生成器是指 列表生成, 好吧,我讀書少。python

其實呢,生成器是 使用yield 返回實現了迭代器協議的generator 對象。 以下:code

<!-- lang: python -->
	class Data(object):
	def __init__(self, *args):
		self._data = list(args)
	def __iter__(self):
		for x in self._data:
			yield x
    d = Data(1,2,3)
    >>> d.__iter__()
    <generator object __iter__ at 0x7f8556d4cdc8>

在python2 中 使用d.next() 能夠返回 d 的下一個值, 在 python3 中 須要使用 d.next() 返回 d 的生成器的下一個值, 生成器可用於 協程夠造。協程

關於迭代器 根據迭代器協議, 須要實現____iter____() 和 next() 兩個方法, 前者返回迭代器對象,後者返回數據,直到引起StopIteration 異常結束。對象

<!-- lang: python -->
class Data(object):
def __init__(self, *args):
    self.data = list(args)
    self.index = 0
def __iter__(self):
    return self
def __next__(self):
    if self.index < len(self.data):
        d =  self.data[self.index]
        self.index +=1
    else:
        raise StopIteration()
    return d
相關文章
相關標籤/搜索