itertools.imap манипулирование Python 2 - PullRequest
0 голосов
/ 13 марта 2019

Контекст:

У меня есть сервер Django, и объект ответа на запрос имеет тип:

type(response) -> itertools.imap

Мне нужно проверить размер с помощью пользовательского метода.Проверка размера прошла успешно, но объект ответа, или, возможно, его содержимое, израсходован / очищен, хотя мой метод не изменяет его.

приведение ответа в виде списка:

list(response)

также потребляет / очищает его - но список заполнен.

Вопрос (ы):

Как получить содержимое файла itertools.imap без его использования / опустошения?

Можно ли превратить список обратно в itertools.imap?

1 Ответ

1 голос
/ 13 марта 2019

itertools.imap и будет использоваться независимо от того, какое действие вы над ним выполняете.

К сожалению, вы не можете преобразовать его обратно в imap, но если вам нужен итератор, вы можете создатьэто из вашего списка.

l = list(response)
new_response = iter(l)

Или вы можете сделать копию вашего итератора с помощью tee

Однако в большинстве случаев достаточно списка

Как правило, если один итератор использует большую часть или все данные перед запуском другого итератора, быстрее использовать list () вместо tee ().

AsУпомянутый в комментариях код не должен заботиться о типе объекта (list или imap), поскольку код перебирает его безразлично

...