Может ли текущее значение генератора взаимодействовать со значением, сгенерированным до него? - PullRequest
0 голосов
/ 08 февраля 2019

Я знаю, yield генерирует значение на лету, насколько я понимаю, это означает, что оно не сохраняет значение в памяти, и поэтому текущее значение не должно взаимодействовать споследние значения.

Но я просто хочу быть уверен, что это так , кто-нибудь может подтвердить, возможно ли это или нет?

Я собираюсь использовать 5 как значение в число .

Пример без генератора:

def factorial(number):
    result = number
    if number <= 1:
        return 1
    else:
        for x in reversed(range(1, number)): # (4,1) reversed
            result *= x # 5*4*3*2*1
    return result # returns 120

Можно ли сделать то же самое с помощью функции yield?как?

Спасибо

1 Ответ

0 голосов
/ 08 февраля 2019

Генераторы могут быть с состоянием:

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)))
...