您可能会查看Iterator Types。基本上你实现了一个类:
class SerialReader(object):
def __init__(self, source):
super(SerialReader, self).__init__()
self.source = source
def next(self):
"""Provide next piece of data from the serial source."""
# If we have no more data, we have to raise StopIteration exception
if self.source.at_end():
raise StopIteration
else:
return self.source.read()
def __iter__(self):
return self
reader = SerialReader(some_serial_source)
for data in reader:
do_something_with_data(data)
优点是使用这种迭代器/生成器 - 您可以将它与任何接受迭代器的 python 方法一起使用:
- 列表理解:
sample = [data for data in serial_reader]
- 迭代工具
- 快速简单地转换为列表:
list(serial_reader)
- 将读取所有数据并返回一个列表
- ... 多得多
迭代器是非常 Pythonic 的模式,你可以经常见面。许多 python 库都使用迭代器。
关于内存使用:假设您想使用另一个接受数据流的函数来处理您的源。您不必加载所有源数据,只需将生成器(迭代器)传递给处理函数,即可根据需要读取数据。