Czy istnieje sposób na połączenie rekursji i instrukcji yield
? Na przykład, nieskończona liczba generator (za pomocą rekurencji) byłoby coś jak:Rekurencja z wydajnością
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
Próbowałem:
def infinity(start):
yield start
infinity(start + 1)
i
def infinity(start):
yield start
yield infinity(start + 1)
Ale żaden z nich nie zrobił tego, co chcę, pierwszy zatrzymał się po uzyskaniu start
, a drugi wygenerował start
, następnie generator, a następnie zatrzymał się.
UWAGA: proszę, wiem, można to zrobić za pomocą pętli while-:
def infinity(start):
while True:
yield start
start += 1
Chcę tylko wiedzieć, czy można to zrobić rekurencyjnie.
Zobacz [tutaj] [1], aby uzyskać dobrą odpowiedź na to pytanie, którą poznałem chwilę. [1]: http://stackoverflow.com/questions/5704220/python-generator-vs-callback-function – sizzzzlerz
Uwaga: właściwy sposób to zrobić byłoby użyć [ 'itertools.count' ] (http://docs.python.org/dev/library/itertools.html#itertools.count) zamiast toczyć własne rozwiązanie, oparte na pętli lub w inny sposób. –
@PetrViktorin to jest tylko przykład, generowanie nieskończonych liczb nie jest wcale prawdziwym problemem – juliomalegria