2016-07-10 1 views
-1

Просто для удовольствия и из любопытства я разработал этот способ написания генератора, который считается бесконечным, по крайней мере, в принципе. Ничего очень питонского. Просто играю.Генератор, который считается бесконечным

Но, очевидно, с каждой итерацией lis получает больше времени, пока что-то не сломается.

Есть ли другие (лучше или хуже) способы достижения одной и той же цели? Поделись, пожалуйста.

lis = [1] 
gen = ((k, lis.append(k+1))[0] for k in lis) 

Чтобы использовать его

for j in gen: 
    print(j) 
+2

'для г в itertools.count (1): print (i) '...? См. [Docs] (https://docs.python.org/2.7/library/itertools.html#itertools.count), который также содержит эквивалентный код Python ... –

+0

@ TigerhawkT3 не уверен, что это лучшая цель обмана (я смотрел для одного) - поскольку он фокусируется в основном на бесконечно повторяющейся последовательности (хотя в одном ответе кратко упоминается «itertools.count») - не бесконечно увеличивающаяся последовательность ... –

+0

Почему даже использовать генератор, если вы собираетесь держать список в памяти? –

ответ

0

Просто используйте itertools.count. Вот пример:

>>> from itertools import count 
>>> gen = count(0) 
>>> next(gen) 
0 
>>> next(gen) 
1 
>>> next(gen) 
2 
>>> next(gen) 
3 
>>> next(gen) 
4 
>>> 
0

Вы можете использовать itertools.count:

import itertools 

for i in itertools.count(1): 
    print(i) 

Из приведенных выше этой документации функционально эквивалентно:

def count(start=0, step=1): 
    # count(10) --> 10 11 12 13 14 ... 
    # count(2.5, 0.5) -> 2.5 3.0 3.5 ... 
    n = start 
    while True: 
     yield n 
     n += step 
Смежные вопросы