Генераторы могут быть с состоянием:
def fibs():
a, b = 1, 1
while True:
yield b
a, b = b, a + b
g = fibs()
for i in range(10):
print next(g)
Здесь состояние находится в локальных переменных.Они сохраняются, пока итератор, сгенерированный генератором, активен.
РЕДАКТИРОВАТЬ.Я слепой, это факториал
def factorials():
i = 1
a = 1
while True:
yield a
i+=1
a*=i
или если вам нужна функция, а не их поток, то вот один вкладыш
print reduce(lambda a, b: a*b, (range(1, 10+1)))