Генераторы и оператор yield

Предположим, я хочу создать функцию, которая принимает итерабельность. Этот итеративный может содержать другие итерации любого уровня. Я хочу создать функцию, которая выполняется по порядку. Так, например:

import collections def it(l): for i in l: if isinstance(i, collections.Iterable): it(i) else: print i it([ [1, 2, 3], [[4, [5, 6]], 7], 8, [9, 10]]) 

Это дает следующий результат (как и ожидалось): 1 2 3 4 5 6 7 8 9 10

Не предполагается, что я хочу сделать это с помощью генератора. Почему следующие работы не работают, как я ожидал бы (по существу, заменяя оператор print продуктом):

 import collections def it(l): for i in l: if isinstance(i, collections.Iterable): it(i) else: yield i 

Благодаря!

One Solution collect form web for “Генераторы и оператор yield”

потому что, когда вы рекурсируете, вы возвращаете новый генератор. Но этот генератор никогда ничего не дает, потому что вы не перебираете его. Вместо этого сделайте что-нибудь вроде:

 def it(l): for i in l: if isinstance(i, collections.Iterable): for item in it(i): yield item else: yield i 

Или, в python3.3, вы можете использовать yield from ключевого слова.

Interesting Posts

Затенение фона matplotlib на основе массива и цветовой схемы

Заполнение одного цветного фона в OpenCV

граница настройки python для POST с использованием multipart / form-data с запросами

Постройте массив дат на прошлой неделе, на этой неделе и на следующей неделе

Производить контент неограниченно в отдельном потоке для всех подключений?

Время печати в скрипте многопроцессорности Python возвращает отрицательное время

Есть ли эквивалент функции MATLAB bsxfun в python?

Есть ли встроенная функция javascript, похожая на os.path.join?

Как очистить одно поле с помощью Django Rest Framework?

создать несколько объектов класса с разными аргументами

тесты: у python есть более быстрый способ перехода в сетевую папку?

Как вложенные функции работают в Python?

csv для json с данными столбцов, которые необходимо сгруппировать

tf-idf с использованием sklearn.feature_extraction.text.TfidfVectorizer

Идеальная пересылка – в Python

Python - лучший язык программирования в мире.