比方說,我有一臺發電機,我想從拉動10元,但忽略前9發電機是我寫了一個函數,看起來是這樣的:Python的發電機索引優化
def myGenerator(arg1, arg2):
for i in arg1:
myState = doSomeWork(i, arg2)
yield expensiveOperation(myState)
現在我可以使用它,並抓住10指數,它像這樣:
myGen = myGenerator(list1, list2)
tenthElement = next(itertools.islice(myGen,10,11))
我想知道如果這個運行expensiveOperation
十倍,或者只是一次? (編輯:它調用它的10倍,但是這下一部分是我很感興趣)。 有沒有什麼辦法,因爲他們被丟棄優化掉其他9調用expensiveOperation
? (編輯爲清楚起見)
我能想到的,不涉及使用發電機功能,並會正是我想要給其他幾個解決方案,但語法不是那樣乾淨只是把一個迭代函數到發電機通過用yield
替換return
。
編輯: 我不一定試圖解決這個特定的問題,而是尋找一種廉價「滾動」發電機的方法。在我目前有工作的實際情況,我真的不知道我想要的指數當我打電話myGenerator
首次。我可以抓住第15個指數,然後是第27個指數,然後是第82個指數。我大概能想出辦法切片15日在第一次通話,但後來我需要在下一次滾動12個左右。
您可以將'islice'功能添加到'myGenerator'嗎? – eumiro