【发布时间】:2017-07-21 14:38:01
【问题描述】:
我想做一个发电机。并且该生成器应该采用可迭代的。这基本上是为了让我可以将生成器插入现有框架。
这是我目前得到的代码。
class Iter1(object):
def __init__(self, iterable=None):
self.iterable = iterable
def __iter__(self):
if self.iterable is None:
self.iterable = Iter2()
return self.iterable
def next(self):
for thing in self.iterable:
yield thing
class Iter2(object):
DEFAULT_PATH = r"/Users/Documents/stuff.txt"
def __init__(self, path=None):
self.path = path or self.DEFAULT_PATH
def __iter__(self):
return self
def next(self):
with open(self.path, 'r') as f:
for line in f:
yield line
if __name__ == "__main__":
iterable = Iter1()
for thing in iterable:
print(thing)
这段代码有两个问题。首先是返回(产生)的不是文件中的一行,而是另一个生成器对象。
第二个是它不返回文件中的行数,它只返回无限多的行。我明白这是因为每次我在Iter2 中调用next 时,我都会再次打开文件,但是我不明白如何在不将整个文件加载到内存的情况下生成每一行。
【问题讨论】:
标签: python python-2.7 iterator generator