Почему я не могу использовать while
в [синтаксисе для пониманий и выражений генератора]?
Это просто не определено для работы таким образом. Может быть, будущая версия может поддержать его, если есть четкое предложение (PEP) и достаточный спрос.
Как я могу иметь бесконечный цикл в пределах понимания списка?
с предложением for
, которое зацикливается на каком-то неограниченном генераторе. itertools
предоставляет пару из них: count
(производит бесконечные увеличивающиеся числа) и repeat
(продолжает давать одно и то же значение, если не указан явный счет). Кроме того, вы можете создать его самостоятельно из встроенного iter
:
>>> help(iter)
Help on built-in function iter in module builtins:
iter(...)
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
Get an iterator from an object. In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.
Первая версия явно не помогает, но для второй все, что нам нужно, это вызываемый элемент, который возвращает некоторое значение,и значение часового, которое является другим значением. Например, iter(lambda: True, False)
.