1-13 Pythonのイテレータとジェネレータ

 

イテレータ

イテレーションは、Pythonの最も強力な機能の一つはコレクション要素にアクセスする方法です。

イテレータオブジェクトがトラバース位置であることを覚えていることができます。

すべての要素は、セッションが終わってアクセスされるまで、イテレータオブジェクトは、コレクションの最初の要素からの訪問を始めました。イテレータは、前方、後方ではない移動することができます。

:イテレータは、2つの基本的な方法があるITER()  と  次の()

文字列、リスト、タプルまたはオブジェクトは、イテレータを作成するために使用することができます。

>>>list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

イテレータオブジェクトは、従来のトラバース文に使用することができます。

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

次のように上記の手順を実行すると、出力結果は、次のとおり

1 2 3 4

あなたはまた、次の()関数を使用することができます。

#!/usr/bin/python3
 
import sys         # 引入 sys 模块
 
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象
 
while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

次のように上記の手順を実行すると、出力結果は、次のとおり

1
2
3
4

イテレータを作成します

クラス内の二つの方法のイテレータの使用を実装する必要があるとしてクラス__nextと__iterの__()__()

すでにオブジェクト指向プログラミングを理解していれば、私たちはクラスのコンストラクタは、オブジェクトが初期化されるときに実行されるPythonのコンストラクタ__init __()は、あることがわかっています。

続きを読む:Pythonの3オブジェクト指向

__iter __()メソッドは、イテレータオブジェクトは、__next __()メソッドを実装することにより、特別なイテレータオブジェクトを返すを呼び出すとStopIteration異常フラグ反復完了する。

__next __()メソッド(Pythonの2次へ()である)次の反復オブジェクトを返します。

徐々に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例外、無限ループを防止 __nextで、__()メソッドを、我々は異常な反復を終了するサイクルの指定された数を終了した後、トリガを呼び出すとStopIterationを設定することができます。

20回の反復後に実行を停止します。

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 20:
      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
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

ジェネレータ

Pythonでは、関数発生器を使用して収率(発電機)と呼ばれます

差は通常の関数と、ということである発電機が戻りイテレータ関数であるだけ反復操作に使用することができ、より簡単に理解ジェネレータはイテレータです。

呼発生器は、各遭遇収率機能が一時停止を実行し、現在の動作情報の全てを保存している間に、収率の戻り値、及び(次の次の実行)は、その現在位置方式で動作し続けます。

ジェネレータ関数を呼び出すと、それはイテレータオブジェクトを返します。

次の例では、歩留まりを達成フィボナッチ列を使用しています。

#!/usr/bin/python3
 
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

 

おすすめ

転載: blog.csdn.net/u012717715/article/details/91957606