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)
- すべてのデータを読み取り、リストを返します
- ... はるかに
Iterator は非常に Pythonic なパターンであり、頻繁に会うことができます。多くの Python ライブラリはイテレータを利用しています。
メモリ使用量について: データのストリームを受け入れる別の関数でソースを処理したいとします。すべてのソース データをロードする必要はありません。ジェネレーター (イテレーター) を処理関数に渡すだけで、必要に応じてデータが読み込まれます。