Доброго времени суток всем читающим.
Вот такой вопрос: требуется найти min (или max) последовательности, генерируемой функцией-генератором, что-то вроде
def foo(bar):
for i in bar:
.....
yield buzz
x = min(foo(y))
Проблема в том, что foo() может генерировать и пустую последовательность, т.е. вывалиться без единого захода в ветку содержащую yield. Поскольку min (и max) от пустой последовательности — это полный нонсенс
, то в этом случае вылетаем с исключением ValueError:
ValueError: min() arg is an empty sequence
Можно конечно сделать вот так:
x = ()
try:
x = min(foo(y))
except ValueError:
pass
Но это как-то не того
Еще вариант:
def foo(bar):
for i in bar:
.....
yield buzz
yield ()
x = max(foo(y))
Пустая последовательность, сгенерированная на выходе из foo(), насколько я понимаю, меньше любой другой последовательности. Отмечу также, что в этом случае потребовалось слегка переработать алгоритм с тем, чтобы потребовалось искать не min а max (min в таком варианте, очевидно, даст нам пустую последовательность). Если алгоритм не допускает такую переработку — тем хуже для алгоритма.
А есть ли более кошерные варианты решения задачи?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)