Не очень понимаю смысл бесконечных массивов в Python. Ладно бы можно было просто обратиться к конкретному элементу, и он бы вычислялся, и результат автоматически кэшировался и все такое. Так нет ведь, нужно перебирать элементы циклом for-in. Непонятно, есть ли от этого какой-то профит по сравнению с функцией, возвращающей нужный элемент вместо бесконечного массива?
def factorial():
i = 1
k = 1
while True:
yield k
k = k * i
i += 1
factorial()[5] # так нельзя
for i in factorial():
...
if ...: break # так можно, но зачем?