はじめに:
このセクションの反復可能なイテレータ前に、これらの概念の私の理解はしていないかもしれない表現するために、いくつかの情報を、いくつかの混乱でしたが、私の友人の始まりのために理解するためにゼロからスタートします
ストレートポイントに最初の反復可能オブジェクトの人気の理解とイテレータを導入
イテレータは、イテレータが直接シーケンス値の反復を保存し、下で得られたアルゴリズム格納された値の反復しない、オブジェクトの値の次の反復を取得するために呼び出す)だけで(次のことです
反復可能オブジェクトは、反復可能オブジェクトを取得するにはITER()メソッドの呼び出しになることです、だけのためのループのために利用できるイテレート可能オブジェクト
ループのための基礎となる原則:
以下は、ループ用のフォーマットであります
以下のための I での反復可能オブジェクト: ループ
この方法の本質は、内蔵ITER()得られたイテレータオブジェクト、iはそれぞれ次の(イテレータ)の呼び出しによって得られ、その後の反復値を呼び出すことです
たとえば、次のコード:
以下のための私でX: プリント(I)
それはのように書き換えることができます。
反復子= ITER(x)は 、一方TRUE: I = 次(イテレータ) プリント(I)
厳密に言えば、または基本原理
反復子またはイテレータオブジェクトは:__next __()メソッドマジック(クラスがインスタンス化された)オブジェクトを実装し、この方法は、次の値のイテレータを返します
反復可能オブジェクト:__イテレータオブジェクトを返す__iterマジックメソッド(クラスはインスタンス化)オブジェクトを()実装
実際には、次のとITERパッケージ__next__と__iter__または遠い次言うと、彼らはイテレータを達成するため、および反復可能に__next__と__iter__内の機能を実行するために呼び出されITERそして、機能
要約すると、我々はループ、イテラブル、イテレータ3つのコンタクトについて理解することができます:
ループの反復のためのオブジェクトのみ、彼らはイテレータを実装する必要がイテレート可能オブジェクトことができます
したがって、我々は、カスタムのサイクルの効果を達成するために、カスタムイテレータとイテレータオブジェクトを実装することができます
例:
フィボナッチ数列は、イテレータと反復可能なカットスルー達成するために
これらは、イテレータ・クラスやオブジェクトが反復を所属定義されています。
クラス月オン:
「」「オブジェクトのクラスの反復で定義することができる」「」 DEF __init__ (セルフ、NUMを):#NUM列の数の長さを示し self.aを = 1 self.b、 = 2
self.current = self.a
self.num NUM = DEF __iter__ (セルフ): 返すFebIterator(セルフ) クラスFebIterator(セルフ):
'' '定義されたイテレータ・クラス' '' DEF __init__ (セルフ、出典): self.source = ソース DEFの __next__ (セルフ):
(IF 。:> = 0)1-self.num
。self.num = self.num 1- self.current = self.a 自己。A = self.b、 self.b、 = + self.current self.b、 #つの中間変数割り当て上記直接self.a、self.b = self.b、self.a +書き込むために省略されてもよい B、自己
返すself.curent
他:昇給を呼び出すとStopIterationを
オブジェクトをインスタンス化するために、これらの2つのクラスを呼び出すことにより、循環印刷フィボナッチ数を達成することができます
2月= 2月()
のための I で2月: プリント(I)
次のように実際には、シンプルさと利便性のために、同時に__iterの__()とクラスの__next __()メソッドを達成することができ、オブジェクトをインスタンス化されるクラスは、一つだけの反復イテレータオブジェクトです。
クラス2月: DEF __init__ (): self.a = 1 self.b = 2
sele.current = self.a DEF __iter__ (自己): 戻り自己 デフ __next__ ():
IF(self.num-1> = 0)。
= self.num。1-self.num
self.current = self.a
self.a = self.b、 self.b、self.current#+ = self.b、二つの中間変数割当を直接書き込むために省略されてもよい上方self.a 、self.bは、self.b、=、+ self.aセルフは、Bの
リターンはself.curent
他:昇給を呼び出すとStopIteration
その使用する前と違いはありませんが、より簡単で、そこイテレータと反復可能の明確な理解と意識がある、または二つの概念を混乱させる提供