Генератор выдан, но возвращаемая переменная не напечатана
При использовании генераторов мы выдаем переменную, значение которой сохранено, и возобновим с этим сохраненным значением, когда мы дадим 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 ответ
Вы используете интерактивный переводчик Python для вызова next()
и это функция этой оболочки для печати возвращаемых значений. То, что вы видите, не имеет ничего общего с генераторами.
Просто назначьте возвращаемое значение next()
вызов переменной, чтобы они не отображались:
ignored = next(a)
или запустите свой код как скрипт.
Обратите внимание, что генераторы немедленно приостановлены; никакой код внутри не запускается, пока вы не позвоните next()
в теме. На этом этапе код выполняется до yield
выражение достигнуто; это значение возвращается, и генератор снова останавливается. Ни в коем случае yield
результат "сохранен".