はじめに
収量とは何かを理解するには、まずジェネレーター (generator
)是什么,在讲生成器之前先说说迭代器(iterator
),当创建一个列表(list
)时,你可以逐个的读取每一项,这就叫做迭代(iteration
) を理解する必要があります。
mylist
は反復可能なオブジェクトです。リスト内包表記を使用してリストを作成すると、反復可能なオブジェクトが作成されます:
「for··· in ···
”来操作可迭代对象,如:list
,string
,files
」を使用できます。これらの反復オブジェクトは、必要に応じて繰り返し読み取ることができるため、非常に便利です。ただし、すべての要素を事前にメモリに保存する必要があります。これらのオブジェクトに多くの要素がある場合、すべてのアイテムがあなたに役立つわけではありません
。
ジェネレーターも反復可能なオブジェクトですが、すべての値をメモリに保存するのではなく、値を動的に生成するため、一度しか読み取ることができません:
[]を()に置き換えるだけで違いはないようです。ただし、ジェネレーターは 1 回しか反復できないため、for i in mygenerator
を再度使用することはできません。最初に 0 を計算し、次に 1 を計算し続け、次に 4 を次々に計算します...
yield
是一个类似 return
キーワードですが、この関数はジェネレーターを返します。
この例自体は意味がありませんが、この関数が一度だけ読み取ることができる値のセットを返すことを明確に示しています。yield をマスターするには、まず次のことを理解する必要があります。上記の例 createGenerator()
では、プログラムは関数本体のコードを実行せず、ジェネレーター オブジェクトを返すだけですが、これは非常に微妙です。関数本体内のコードは、ジェネレーターの各ループ反復 (for) まで実行されません。
関数は最初の反復で実行され、最初から yield
关键字,然后返回 yield
までの値が最初の反復の戻り値として使用されます。その後、この関数が実行されるたびに、次回も引き続き実行されます。関数内で定義したループで、返すものがなくなるまでその値を繰り返し返します。
yield
キーワードがジェネレーター内で定義されていない場合、ジェネレーターは空とみなされます。これは、ループが不足しているか、if/else 条件が満たされていないために発生する可能性があります。
概要
上記はこの記事の全内容です。この記事の内容が Python の学習または使用に役立つことを願っています。ご質問がある場合は、メッセージを残してください。