ジェネレータ仕上げバージョン

ジェネレータ

知人ビルダー1.1

発電機は何ですか?この概念は曖昧で、文学は異なる理解を持っていますが、コアは基本的に同じです。ビルダーPythonコミュニティでは、本質的に、イテレータ、ほとんどの時間は、イテレータと発電機は同じ概念をしていると見なさ。なぜ同じではありませんか?なぜジェネレータを作成しますか?ジェネレータとイテレータも異なっている、唯一の違いはこれです:Pythonツールイテレータが既に書き込まれたデータを提供することですか来て変換することにより、(ファイル・ハンドルなど、ITER([1,2,3]) 。Builderは、私たちは自分のPythonコードのビルドを使用する必要があるツールです。最大の違いは、ケースになります。

1.2発電機を内蔵しています

ジェネレータを作成するためのPythonで3つの方法があります。

  1.ファンクション・ジェネレータ

  2.ジェネレータの導出

  組み込み関数又はモジュール3パイソン(基本的に2つのオン1,3-ほぼ同様に、関数の形で生成され、1つだけが、関数発生器を書くことで、3のみPythonのジェネレータ機能により提供されます)

1.3ジェネレータ機能

私たちは、最初のジェネレータ関数によって生成された建物を調べます。

まず、我々は非常に単純な関数を見てみましょう。

FUNC DEF():
    印刷(11)
    22を返すがある
RET = FUNC()
印刷(RET)
結果:
11 
22れます

収量への復帰の機能、それはFUNC機能ではないようではなく、ファンクション・ジェネレータ

DEF FUNC():
    プリント(11)は、
    22を得

私たちは、理由である、任意の変更を書き込みませんでした?のは、カッコ内の関数名を取得したか見てみましょうか?

FUNC DEF():
    印刷(11) 収率22は、
RET = FUNC()
印刷(RET)
実行結果:
<ジェネレータFUNC AT 0x000001A575163888オブジェクト>

その結果、トップランが降伏関数のなので、この関数はジェネレータ関数である理由??、同じではありません。

ときに我々は、この機能を実行する。もはや機能を実行されません。その代わりに、オブジェクトがどのようにそれを値を生成するために、ジェネレータオブジェクトを取得しますか?

私たちが言う前に、発電機は基本的にイテレータです。どのようにイテレータ値、発電機を評価する方法。だから我々は、直接実行することができ、次へを以下の発電を行うために()

FUNC DEF():
     印刷( "111")
     222が得られる
。GENER = FUNC()関数で、この時点で#は、それが⽣ジェネレータに取得することです⽽実行していません
RET = GENER .__次__() #の機能のみ、この時間をYESであろう
(RET)を印刷#1 funcがRETに生成され、収率データ222します。  
結果:
111 
222

そして、私のジェネレータ関数は、より多くの収率で書き込むことができます。

FUNC DEF():
    印刷( "111")
    収率222 
    プリント( "333")
    収率444 
GENER = FUNC()
RET = GENER .__次に__()
プリント(RET)
RET2 = GENER .__ next__ ()
印刷(RET2)
RET3 =次にGENER .__ __() 最後のフレーム収率再び完全__nextを実行__()プロシージャエラー
プリント(RET3)
結果:
111 
222 
333 
444

プログラムは、収量の最後に実行されている場合、それは後ろに実行を継続次にイテレータのように、次、次の収率の数を超え、エラーう収率に相当する、()プログラムを説明します。

    収量との違いを返します。

        一般的にはリターン機能は一つだけ、彼の役割は、機能を終了することで、機能の実行の戻り値に提供されます。

        複数設けられていてもよいジェネレータ関数を得て、彼は機能を停止しないことを、次の対応する捕捉要素が生成もたらします。

例えば:

私たちは、この需要を見て:ボス階下蒸しパンを販売歳の少年は、包子プルトニウムの上司は非常に現実的である万個のパンを命じ、彼らが働いたすべてのだろう。  

DEF)(食べる:
    LST = [] 
    の範囲でI(1,10000)のために:
        lst.append( '包子' + STR(I))は
    LST戻り
E =食べる()
プリント(e)を

そうすることは問題ありませんが、学生はそんなに、約2000、および8000の残りの部分を食べるので、我々はなかった、我々は唯一のいくつかの領域を達成することができ、脇に置きます。包子プルトニウムのボス効率が十分に高い場合、私は、あなたが、それはあまりにも多くのストレージスペースを取るし、完璧ではないでしょうかパンをパンを食べます。

DEF)(食べる:
    iについての範囲(1,10000)において:
        収率'包子' + STR(I)
E =(食べる)
iについての範囲(200)において、
    次の(E)

2間のこの違い:

    最初は、全てのパンに直接それを行うメモリを取ることです。

    第二は、非常に省メモリを生産食べることですが、また、以前の位置を保持します。

DEF()EAT: 範囲(1,10000)におけるIため
        収量'パン' + STR(I)
E = EAT()
の範囲内のiについて(200である):
    (E)次
の範囲内のiについて( 300):
    次の(E)
複数の次の順番の番号が記録され#パン。
    

1.4 sendメソッド(話すことはありません、理解)

・私たちは、物事の新しい理解に来次に、メソッドを送ります

次世代のみ収率の値を得ることができるが、値を渡すことはできません。
DEF ゲン(名):
     印刷(F {名前}盛り付けながら 1 
        食品 = 降伏
        プリント(F {名前} {食べ物を食べるために開始}  =ゲン(アレックス
次に(イヌ)
次に(イヌ)
次に(イヌ)
この方法が可能である送信使用。
DEF ゲン(名):
     印刷(F ' {名前}食べることREADY ' 一方、 1 
        食品 = 収率 222
         プリント(F {名前} {食べ物を食べるために開始}  =ゲン(アレックス
次の(犬)   初めて次の収率で、最初のポインタで許可されなければなりませんバックおよび降伏値として次を得ることができる 
RET = dog.send(プリント(RET)
DEF :ゲン(名)
     を印刷(F {名前}盛り付けながら 1つの
        食品 = 降伏
        プリント(F {名前} {スタート食物を食べる}  =ゲン(アレックス
次に(犬)
#はまた、降伏に送信された値であってもよい 
dog.send(
犬。 (送信' ' 
dog.send(' ソーセージ'
コードの表示

違いを送信し、次の():

        同じポイント:

            発電機は一度下方対応を得ることができるように送信し、次の()。

            降伏値が生成され得ることができます。

        違い:

            第1の取得収率値は、次の((なし)を送信することができない)送信することはできません使用することができます。

            設定値が送信され得るために送信することができます。

から1.4利回り

python3であってもよく、データオブジェクトの直接各反復を提供する結果、発電機として返されます

収率および収率の比較
DEFのFUNC():
    LST = [ ' ウェイロング'' 古いアイスキャンディー'' 北極'' と羊' ]
     LST 
G = FUNC()
 プリント(G)
 印刷(次へ(G ))  は、リストのみを返し
DEF )FUNCを(:
    LST = [ ' ガーディアンドラゴン'' 古いポプシクル'' 北極'' 牛や羊と' ]
     収率 からLST 
G = FUNC()
 プリント(G)
イテレータが返されるように、各反復の結果の各要素の彼は、このオブジェクト(リスト)を使用することができます。
プリント(次へ(G))
 プリント(次へ(G))
 プリント(次へ(G))
 プリント(次へ(G))
 ' '' 
ガーディアンドラゴン''古いポプシクル【から得' ''北極''牛羊と「] 
と等価です:
    歩留まり」Waylung「
    歩留まり」は昔のアイスキャンディー「
    降伏」北極「
    羊と歩留まり」「
」「」
コードの表示

そこ小さな穴、各要素を返すリストからの収量はあるので、あなたがから2つの歩留まりを書いて、効果を交互に生成していない場合

DEF FUNC():
    LST1 = [ ' ウェイロング'' 古いアイスキャンディー'' 北極'' と羊' ] 
    LST2 = [ ' パン'' 花巻'' BEAN '' ケーキ' ]
     収率 からLST1
     収率 からLST2 
    
G = FUNC()
 のための I におけるG:
     印刷(I)
コードの表示

 

おすすめ

転載: www.cnblogs.com/shangping/p/11408777.html