Pythonの研究ノート - イテレータとジェネレータ

イテレータ

反復は、コレクションの要素にアクセスする方法です。
イテレータオブジェクトがトラバース位置であることを覚えていることができます。
イテレータオブジェクトは、すべての要素が、セッションが終わってアクセスされるまで、コレクションの最初の要素からの訪問を始めました。イテレータは前方にのみ移動することができ、後方ではありません。

:イテレータは、2つの基本的な方法があるITER()次の()
文字列、リスト、タプルまたはオブジェクトは、イテレータを作成するために使用することができます。

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

1 2 3 4
#或者使用next()函数
while True:
    try:
        print (next(it))	# 输出迭代器的下一个元素
    except StopIteration:
        sys.exit()

イテレータを作成します

クラスが持つクラス内の2つのメソッド__iter __()を実装するためにイテレータ必要として使用する次のページを()。
すでにオブジェクト指向プログラミングを理解していれば、私たちはクラスのコンストラクタへのPythonのコンストラクタがある知っているのinitオブジェクトが初期化されたときに実行されます()、。
ITER()メソッドは、特別なイテレータオブジェクトを返すイテレータオブジェクトが実装する)(反復完了を呼び出すとStopIteration異常フラグによる方法。
次の()メソッドは次のイテレータオブジェクトを返します。

徐々に1を増やすイテレータ、1の初期値は、戻り値の作成します:

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))

1
2
3
4
5

呼び出すとStopIteration

完全識別反復のため呼び出すとStopIteration例外、無限ループを防ぐ次に()メソッド、我々は異常な反復を終了するサイクルの指定された数を終了した後、トリガを呼び出すとStopIterationを設定することができます。
5回の繰り返しの後、実行を停止します。

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        if self.a <= 5:
            x = self.a
            self.a += 1
            return x
        else:
            raise StopIteration


myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
    print(x)

1
2
3
4
5

ジェネレータ

Pythonでは、関数発生器を使用して収率(発電機)と呼ばれます。
差は通常の関数と、発電機があることであるリターン・イテレータ機能だけ反復操作に使用することができ、より簡単ジェネレータはイテレータであると理解。
呼ジェネレータが動作している間に、各遭遇収率機能が一時停止して保存現在の動作情報、収率の戻り値、及び(次の次の実行の全て)は、その現在位置方式で動作し続けます。
ジェネレータ関数を呼び出すと、それはイテレータオブジェクトを返します。
次の例の用途収率はフィボナッチ列を達成しました:

import sys
 
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

0 1 1 2 3 5 8 13 21 34 55

python3イテレータとジェネレータ

公開された11元の記事 ウォンの賞賛3 ビュー930

おすすめ

転載: blog.csdn.net/qq_36551226/article/details/104142356