阅读您的编辑后,也许您可以修改返回任意数量文本的流对象?例如,在该stream.next()
方法中,流以某种方式生成一个字符串,并yields
在何时.next()
调用它。你能做类似的事情:
def next(self):
if '\n' in self.remaining:
terms = self.remaining.split('\n')
to_yield, self.remaining = terms[0], ''.join(terms[1:])
yield to_yield
else:
to_yield = self.remaining + self.generate_arbitrary_string()
while '\n' not in to_yield:
to_yield += self.generate_arbitrary_string()
to_yield, self.remaining = terms[0], ''.join(terms[1:])
yield to_yield
此伪代码假定流对象生成一些任意字符串,带有generate_arbitrary_string()
. 在您第一次调用 时next()
,self.remaining
字符串应该为空,因此您转到else
语句。在那里,您连接任意字符串,直到找到一个newline
字符,在第一个字符处拆分连接的字符串newline
,产生前半部分并将后半部分存储在remaining
.
在随后的 调用中next()
,您首先检查是否self.remaining
包含任何newline
字符。如果是这样,产生第一行并存储其余的。如果不是,则追加一个新的任意字符串self.remaining
并像上面一样继续。