我想在我的發電機的以下兩個定義之間做出決定。哪個更好?這是「更pythonic」?無論如何要緩解每個人的缺點?Python生成器 - 突變最後結果?
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)
第一個修改已經由發電機回來,可能與調用,我還沒有預見到的代碼搞亂的值。第二種情況下,在這種情況下產生1000元的垃圾,或者如果我增加「howMany」(我可能會)。
我給出的循環只是我當前使用的生成器。我不想認爲我會永遠保存它的值,但它是一個有用的工具,可能在別處有用。
如果你擔心「垃圾」對性能的影響,那麼**測試性能**。 –
好點。我並不是特別關注表現,而是更多地尋找關於這種設計是好的做法還是令人不悅的指導。 –
@雷蒙德非常感謝我的建設性答案,即使我意識到這是一個愚蠢的問題。我是一個Python小菜鳥,所以仍然在思考我的方式。我跟隨了itertools的鏈接,結果發現我正在尋找itertools.product([[0,1,2]] * 3),但知道它返回了一堆不同的元組。 –