ホームページ  >  記事  >  バックエンド開発  >  Python での yield 式の簡単な紹介 (例付き)

Python での yield 式の簡単な紹介 (例付き)

不言
不言転載
2018-10-08 16:25:312743ブラウズ

この記事では、Python の yield 式について簡単に紹介します (例とともに)。一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。

yield 式はジェネレータ関数で使用されます

ジェネレータ関数を呼び出すと、イテレータが返されます (関数内のステートメントは実行されません)。イテレータ関数が呼び出されるとき、 yield 式が実行されます。

現在の関数は実行を一時停止し、式の値を呼び出し元に返し、反復関数の呼び出しを継続し、一時停止ポイントから実行を再開します。 ,

yield 式の検出は、他の式の検出と似ています。yield 式にも値があり、通常は None です。

他の式との違いは、yield 式は、yield で式の値を返すことです。

公式ドキュメントでは次のように説明されています。

ジェネレーター関数がと呼ばれる場合、 として知られる反復子を返します。 そのジェネレーターはジェネレーターの実行を制御します。 関数。ジェネレーターのメソッドの 1 つが実行されると、実行が開始されます。 その時点で、実行は最初の yield に進みます。 式が再び一時停止され、次の値が返されます。 ジェネレーターの呼び出し元にexpression_listを送信します。一時停止とは、次のことを意味します。 ローカルの現在のバインディングを含め、すべてのローカル状態が保持されます。 変数、命令ポインタ、内部評価スタック、および 例外処理の状態。実行が再開されたとき。 ジェネレーターのメソッドの 1 つを呼び出すと、関数は正確に処理を進めることができます。 あたかも yield 式が単なる別の外部呼び出しであるかのように。 再開後の収量式はどのような方法で変化するかによって異なります。 __next__() が使用されている場合 (通常は for または next() 組み込み)の場合、結果は None になります。 使用すると、結果はそのメソッドに渡される値になります。

Yield 式は、try 構造内のどこでも使用できます。 ジェネレータは、(ゼロに到達することによって)完了するまで再開されません。 参照カウントまたはガベージ コレクションによって)、ジェネレーターとイテレーターの close() メソッドが呼び出され、保留中のfinally句を許可します。 execute.

基礎となるイテレータが完了すると、値は 発生した StopIteration インスタンスの属性は、

公式の例:

>>> def echo(value=None):
...     print("Execution starts when 'next()' is called for the first time.")
...     try:
...         while True:
...             try:
...                 value = (yield value)
...             except Exception as e:
...                 value = e
...     finally:
...         print("Don't forget to clean up when 'close()' is called.")
...>>> generator = echo(1)>>> print(next(generator))
Execution starts when 'next()' is called for the first time.1
>>> print(next(generator))
None>>> print(generator.send(2))2
>>> generator.throw(TypeError, "spam")
TypeError('spam',)>>> generator.close()
Don't forget to clean up when 'close()' is called.

##イテレータバージョン #をシミュレートする##rangefunction

def my_range(start, stop=None, step=1):
    if not stop:
        stop = start
        start = 0
    while start < stop:
        yield start
        start += step


if __name__ == &#39;__main__&#39;:
    for i in my_range(10):
        print(i)
    for i in my_range(0, 10):
        print(i)
    for i in my_range(0, 10, 2):
        print(i)

以上がPython での yield 式の簡単な紹介 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。