2011-05-31 2 views
4

Есть ли библиотека или рекомендуемый способ создания конвейера итератора в Python?Как создать конвейер итератора в Python?

Например:

>>>all_items().get("created_by").location().surrounding_cities() 

Я также хочу, чтобы иметь возможность доступа к атрибутам объектов в итераторы. В приведенном выше примере all_items() возвращает итератор элементов, а элементы имеют разные создатели.

.get("created_by") затем возвращает «CREATED_BY» атрибут элементов (которые являются людьми), а затем location() возвращает город каждому человека, а затем ТРУБАМ его surrounding_cities(), который возвращает все итераторы из близлежащих городов для каждого (поэтому конечный результат - это большой список окружающих городов).

+0

Я думаю, что это неряшливо. – mikerobi

+1

Вы ищете: http://code.google.com/p/python-pipeline/ – janislaw

+0

Я пытаюсь понять, что потребуется для эмуляции Gremlin в Python: http: //www.youtube.com/ watch? v = 5wpTtEBK4-E – espeed

ответ

1

Я предлагаю вам посмотреть, как реализовать трубы с coroutines in python, более конкретно этот pipe example

Если вы реализовали свои функции в соответствии с приведенным выше примером, то ваш код будет что-то вроде этого (для простоты, я полагаю, вам 'lh хотят распечатать эти города):

+0

Почему бы не 'all_items (get_creators (get_location (get_surrounding_cities (printer()))))'? Есть ли причина, по которой 'all_items' и' get_creators' ведут себя иначе, чем 'get_location' и' get_surrounding_cities'? – slowdog

+0

На самом деле вы правы, не нужно вести себя по-другому, я отредактировал свой ответ – bpgergo

4

Разве вы не просто обрабатываете итератор? Естественный способ использования итератора в Python является цикл:

for item in all_items(): 
    item.get("created_by").location().surrounding_cities() 

Есть и другие возможности, такие как списковые, которые могут сделать больше смысла в зависимости от того, что вы делаете (как правило, имеет больше смысла, если вы пытаясь создать список в качестве вашего вывода).

1

в вашем примере вы только действительно есть два метода итератора, all_items и surrounding_cities, так что вы могли бы сделать очень хорошо только с itertools.chain:

from itertools import chain 

cities = chain.from_iterable(
    item.get("created_by").location().surrounding_cities() for item in all_items() 
) 

cities затем будет итератор перечисление всех близлежащих городов для пунктов

Смежные вопросы