Понимание вложенных yield / return в python

У меня есть функция в 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-файла для извлечения полей и записи их в базу данных. se. Эта часть делегирована sub_function (). Я также задал этот вопрос для общего понимания использования вложенного yield для рефакторинга кода.

19
задан Soroush 9 September 2016 в 03:47
поделиться