У меня есть функция в Python, вывод которой является генератором:
def main_function(x):
r = get_range()
for i in range(r):
yield x+i
Я хочу реорганизовать код (я упростил сценарий использования, но фактические вычисления могут быть сложными и более длинными. Пожалуйста, см. РЕДАКТИРОВАТЬ ниже). Исходя из моего понимания, это то, что я должен сделать, чтобы сохранить функциональность неизменной:
(a) Тот же интерфейс, что и у исходного кода
def sub_function(x,r):
for i in range(r):
yield x+i
def main_function(x):
r = get_range()
return sub_function(x,r)
По сравнению с другими подходами, где:
(b) Это вернет генератор генератора (Есть ли преимущества этого подхода?)
def sub_function(x,r):
for i in range(r):
yield x+i
def main_function(x):
r = get_range()
yield sub_function(x,r)
(c) Это уничтожило бы цель генератора (Это правильно?)
def sub_function(x,r):
return [x+i for i in range(r)]
def main_function(x):
r = get_range()
for i in sub_function(x,r):
yield(i)
РЕДАКТИРОВАТЬ : Комментарии указывают на то, что правильный ответ зависит от варианта использования. Я хочу добавить, что мой вариант использования заключается в разборе файла XML для извлечения полей и записи их в базу данных. Эта часть делегирована sub_function (). Я также задал этот вопрос для общего понимания использования вложенного выхода для рефакторинга кода.