1.yieldキーワードの機能
イールドのある関数はジェネレーターであり、通常の関数とは異なります。ジェネレーターの生成は関数呼び出しのように見えますが、next()が呼び出されるまで関数コードを実行しません(forループではnext()は自動的に呼び出されて))実行を開始します。実行フローは関数のフローに従って実行されますが、yieldステートメントが実行されるたびに中断され、反復値が返されます。次の実行は、yieldの次のステートメントから続行されます。通常の実行中に関数がyieldによって数回中断されたように見え、中断するたびに、yieldを通じて現在の反復値が返されます。
歩留まりの利点は明らかです。関数をジェネレーターに書き換えると、反復能力が得られます。クラスインスタンスを使用して状態を保存し、次のnext()値を計算する場合と比較して、コードが簡潔であるだけでなく、実行フローも非常に明確です。 。
関数が特別なジェネレータ関数であるかどうかを判断するにはどうすればよいですか?isgeneratorfunctionを使用して判断できます。
2.サンプルコード
from inspect import isgeneratorfunction
def fun(max):
b=0
for i in range(max):
yield b
b+=2
return
print('fun函数是generator(生成器)吗:',isgeneratorfunction(fun))
for i in fun(5):
print(i)
3.実行結果
fun函数是generator(生成器)吗: True
0
2
4
6
8