Pythonのイテレータを生成します

反復可能オブジェクト:オブジェクトITER方式の実現が反復的です

反復子:方法及び次ITER方法の実現は、イテレータの目的であります

BuilderはあるIteratorオブジェクトが、listdictstrしかしIterable(可迭代对象)、ではありませんIterator(迭代器)

コレクションインポートイテレータ   #のイテレータ
からコレクションのインポート反復処理可能   #のイテラブルの
 
印刷(でisinstance(S、イテレータ))     イテレータされていない判断
を印刷(でisinstance(S、反復処理可能))       判断ではない反復可能オブジェクトのある
 
#は反復することを反復子オブジェクトがに変換される
印刷(でisinstance(ITER(S)、反復子))

なぜlistdictstrおよび他のデータ型はありませんかIterator

PythonがあるためであるIteratorのオブジェクト表現データフローは、することができるイテレータオブジェクトnext()起動が機能し続けるとスローデータが存在しないことまで、次のデータを返しStopIteration、エラーを。このデータ・ストリームは、順序付けられたシーケンスとして見ることができるが、我々は唯一のを続行することができ、事前にシーケンスの長さを知ることができないnext()ので、次のデマンドがデータ関数の計算を実現するIteratorだけで次のデータを返す必要があり、計算が不活性でありますそれが計算されます。

Iteratorでも、このようなすべての自然数などのデータ、の無限の流れを表します。リストは、すべての自然数を使用して格納されることはありません。

ジェネレータ:ジェネレータはイテレータです

2つの方法でメソッド・ジェネレータを作成します。

1.式[]括弧に()括弧のリスト

= [Iは+ 1 のための Iの範囲(5)]   リスト式
印刷(A)
B =(Iは、+ 1 のための I レンジ(5))  生成
プリント(B)   
 を印刷(次に(B))
 プリント(次に(B))
 プリント(次に(B))
 プリント(次に(B))
 プリント(次に(B))
 プリント(次に(B))

出力:
[ 1、2、3、4、5 ]
 < 0x00000163C820BAF0 ATジェネレータ<genexpr>を>オブジェクト
。1 
2 
。3 
。4 
。5  
トレースバック(最新のラストコール):
  ファイルE:/myproj/pytest_demo/b.py 、13行目は、ある <Module1の>
     印刷(次(B))
を呼び出すとStopIteration 

最も一般的な発電機やサイクルはを求めて:
Bで私がのために:
プリント(I)

2.関数を定義ファンクション・ジェネレータを呼び出すことによって得られ、文収率が含まれています

DEF FIB(MAX):
    N-、A、B = 0,0,1
     ながら N- < 最大:
         収量B 
        A、B = B、A + B 
        :N- = 1 + N-
     リターン ' DONE ' 
A(6 = FIBは)呼番号を含みます関数は、文はすぐに実行されません、それだけで、ビルダーを返す場合にのみ、プログラムの次の関数呼び出しによって、または発電機()関数は、実際に実行されますトラバース得
 印刷を(a)の
 ために嘘(6 ):
    印刷(I)

出力:
 <ジェネレータFIB AT 0x000001866F62BAF0オブジェクト> 
1。
1。
2 
3。
5。
8。

収量について:
そして、リターンを得るために同様のプログラムの実行を返し、再び呼び出されたときにそう、プログラムは最後の利回り部門から継続します

あなたはまだ不明上記の原理を実行する場合、それはさらにサンプルコードをデバッグすることによって理解することができます...

おすすめ

転載: www.cnblogs.com/wang-mengmeng/p/11440165.html