python-ジェネレータと反復器

4068 ワード

一、ジェネレータの概要pythonでは、ジェネレータはあるアルゴリズムに基づいて循環しながら計算するメカニズムである.主に大量のデータを操作するために使用される場合、一般的には操作されたデータをメモリに読み込んで処理します.コンピュータのメモリは比較的貴重なリソースであり、処理するデータがメモリの4分の1を超えるサイズの場合、ジェネレータを使用するべきだと思います.
二、ジェネレータにはどんな特徴がありますか.1.ジェネレータは、従来のコンテナよりもメモリを節約します.2.遅延計算は、結果が必要な場合にジェネレータのnext()メソッドを呼び出せばよい.3.反復可能、listを巡るように、ジェネレータを巡ることができます.
三、ジェネレータの作成方法pythonでは、ジェネレータ式とジェネレータ関数の2つの方法でジェネレータを作成します.ジェネレータ式
gen1 = (x for x in range(10))

 
ジェネレータ関数生成式関数と一般関数は1つの違いしかありません.一般関数はreturnを使用して結果を返し、ジェネレータ関数はyieldを使用して結果を返します.yieldの特徴は、関数を終了するのではなく、結果を返した後に関数を保留状態にし、再next関数の呼び出しを待って、最後に保留された場所(yield)から実行し続けることです.
def gen():
a = 1
yield a
b = 2
yield b
c = 3
yield c

g = gen()

print(next(g))
print(next(g))
print(next(g))
print(next(g))

 
四、反復器の概要
反復器は、有限数の値を含むオブジェクトです.
反復器は反復可能なオブジェクトであり、反復器のすべての値を巡回することができます.
技術的にはPythonにおいて、反復器は方法__によって反復器プロトコルを実装する対象である.iter__()と_next__()組成.
反復可能なデータ型のリスト、メタグループ、辞書、コレクションは反復可能なオブジェクトであり、反復器を得ることができます.
これらのオブジェクトはすべてiter()メソッドで反復器を取得できます.

メタグループから反復を取得し、各値を巡回して印刷します.
mytuple = ("  ", "  ", "  ")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

五、反復器オブジェクトを作成反復可能になるために反復器を作成するには、方法を実装する必要があります:_iter__()と_next__().
__iter__()メソッドは、反復オブジェクト自体を常に返さなければなりません.
__next__()メソッドは、シーケンスの次のアイテムを返さなければなりません.

1から1(1、2、3、4、5など)ずつ増加する数値を返す反復器を作成します.
class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
x = self.a
self.a += 1
return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))