Esiste un modo per mixare la ricorsione e la dichiarazione yield
? Per esempio, un generatore di numeri infiniti (utilizzando la ricorsione) sarebbe qualcosa di simile:Ricorsione con resa
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
ho provato:
def infinity(start):
yield start
infinity(start + 1)
e
def infinity(start):
yield start
yield infinity(start + 1)
Ma nessuno di loro ha fatto quello che voglio, il primo si è fermato dopo che ha prodotto start
e il secondo ha prodotto start
, quindi il generatore e quindi si è fermato.
NOTA: Si prega di, so che si può fare questo usando un ciclo while:
def infinity(start):
while True:
yield start
start += 1
Voglio solo sapere se questo può essere fatto in modo ricorsivo.
Vedere [qui] [1] per una buona risposta a questa domanda ho posto qualche tempo fa. [1]: http://stackoverflow.com/questions/5704220/python-generator-vs-callback-function – sizzzzlerz
Nota: il modo corretto per farlo sarebbe quello di utilizzare [ 'itertools.count' ] (http://docs.python.org/dev/library/itertools.html#itertools.count) anziché rollare la propria soluzione, basata su loop o altro. –
@PetrViktorin questo è solo un esempio, generare numeri infiniti non è affatto il vero problema – juliomalegria