Powiel możliwe:
How to clone a Python generator object?Jak dostać wiele wystąpień funkcji generującej
Załóżmy, że mam generator „stuff_to_try” Mogę spróbować je jeden po drugim, ale gdybym miał metoda, która chciała przejść przez generator, a ta metoda jest rekursywna, chcę, aby każda rekursja otrzymywała nowy generator, który zaczyna się przy pierwszym wydaniu, a nie w miejscu, w którym ostatnia rekursja została przerwana.
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))
Oczywiście mogę zdefiniować stuff_to_try wewnątrz funkcji rekursywnej, ale czy istnieje lepszy sposób? Czy istnieje odpowiednik stuff_to_try.clone(). Reset() czy coś takiego?
oops, zły przykład w pytaniu. Lista byłaby łatwiejsza, ponieważ sugeruję, że istnieje krótka skończona lista do wygenerowania, ale prawdziwym pytaniem jest, jak klonować generatory, więc przypuśćmy, że generator jest bardziej skomplikowany. – xster
Zdecydowanie najprostszy, ale czasami nie praktyczny. Lista może nie pasować do pamięci. –
Oczywiście, to jest wadą. Powiedział, że może to być jedyne praktyczne rozwiązanie w zależności od generatora pod ręką. –