Ваша идея неплоха - но не с новым ключевым словом until
, а скорее как
a = (<expression> while <condition>)
расширение идеи выражений генератора .
Так как они не существуют, это вам не поможет.
Но то, что вы можете использовать, это iter
функция с дозором.
dummy_sentinel = object()
for r in iter(random_stuff, dummy_sentinel):
if meets_condition(r): break
Если вы можете быть уверены, что ваш random_stuff()
вернет только определенный тип значений, таких как числа, строки и т. Д., Вы можете принять другое значение в качестве стража. Особенно, когда None
никогда не может произойти, примите это, чтобы иметь бесконечный генератор.
for r in iter(random_stuff, None):
if meets_condition(r): break
Затем вызывается random_stuff()
, пока не будет выполнено условие.
Еще лучше может быть
r = next(r for r in iter(random_stuff, None) if meets_condition(r))
, который дает вам первый соответствующий.