Генератор выдан, но возвращаемая переменная не напечатана

При использовании генераторов мы выдаем переменную, значение которой сохранено, и возобновим с этим сохраненным значением, когда мы дадим next() заявление. Есть ли способ, где мы можем сделать это, но на самом деле не печатать значение данной переменной?

def foo():
    n = 0
    print("This is where we start")
    yield n
    n += 1
    print("This is first")
    yield n
    n += 1
    print("This is second")
    yield n

a = foo()
next(a)
This is where we start
0

next(a)
This is first
1
  1. Это очень наивный способ использования генераторов (их реализации) и не показывает их эффективность.
  2. Я знаю, что это также можно сделать с помощью итераторов, где значение не будет напечатано, а просто интересно, можно ли это сделать с помощью генераторов.

1 ответ

Решение

Вы используете интерактивный переводчик Python для вызова next() и это функция этой оболочки для печати возвращаемых значений. То, что вы видите, не имеет ничего общего с генераторами.

Просто назначьте возвращаемое значение next() вызов переменной, чтобы они не отображались:

ignored = next(a)

или запустите свой код как скрипт.

Обратите внимание, что генераторы немедленно приостановлены; никакой код внутри не запускается, пока вы не позвоните next() в теме. На этом этапе код выполняется до yield выражение достигнуто; это значение возвращается, и генератор снова останавливается. Ни в коем случае yield результат "сохранен".

Другие вопросы по тегам