ジェネレーターの次の 2 つの定義のどちらかを決定しようとしています。どちらが良いですか?「よりpythonic」なのはどれですか?そして、それぞれの欠点を軽減する方法はありますか?
def myGenerator1(howMany):
result = [0,0,0]
yield result
for i in range(howMany)
modifyListInPlace(result)
yield result
for val in myGenerator1(1000):
useValThenForgetIt(val)
def myGenerator2(howMany):
result = (0,0,0)
yield result
for i in range(howMany)
result = createNewUpdatedTuple(result)
yield result
for val in myGenerator2(1000):
useValThenForgetIt(val)
最初のものは、ジェネレーターによって返された値を変更します。おそらく、私がまだ予見していなかった呼び出しコードを台無しにします。2 番目は、この場合、1000 タプル相当のガベージを生成します。「howMany」を増やすと (可能性があります)、それ以上になります。
例として挙げたループは、ジェネレーターの現在の使用にすぎません。そこから得られる値を保存することはないと思いますが、他の場所で役立つ可能性のあるちょっとしたユーティリティです。