假設我有一臺發電機「stuff_to_try」,我可以嘗試逐一但如果我一種想要通過生成器並且該方法是遞歸的方法,我想讓每個遞歸獲得一個新的新生成器,該生成器從第一個收益開始,而不是最後一次遞歸離開的地方。
def solve(something):
if exit_condition(something):
return
next_to_try = stuff_to_try.next()
while not if_works(next_to_try):
next_to_try = stuff_to_try.next()
solve(do_something(something))
當然,我可以在遞歸函數內定義stuff_to_try,但有沒有更好的方法?是否有相當於stuff_to_try.clone()。reset()或其他東西?
哎呀,這個問題中的不好的例子。這個列表會更容易,因爲我暗示有一個短的有限列表來生成,但真正的問題是如何克隆生成器,所以假設生成器更復雜 – xster
絕對是最簡單但有時不實用。列表可能不適合內存。 –
當然,這是缺點。也就是說,這可能是唯一可行的解決方案,取決於手頭的發電機。 –