2015-07-20 3 views
5

В сравнении документации для itertools между Python 2 и 3, я заметил, ifilterimap, izip отсутствуют Python 3. Я подозреваю, что это потому, что многие встроенные ключевые слова были преобразованы в генераторы и заменить прежние ключевые слова, но пока неясно, в этом дело.Что случилось с ifilter?

Верно ifilter, imap, izip теперь эквивалентно filter, map, zip в Python 3? Если нет, где я могу найти обоснования, почему некоторые методы были удалены из текущего itertools?

ответ

9

Python 2.3 представил модуль itertools, который определял варианты глобальных zip(), map() и filter() функций, возвращаемых итераторов вместо списков. В Python 3 эти глобальные функции возвращают итераторы, поэтому эти функции в модуле itertools были устранены.

enter image description here

  • Вместо itertools.izip(), просто использовать глобальную zip() функцию.
  • Вместо itertools.imap() просто используйте map().
  • itertools.ifilter() становится filter().
  • Модуль itertools все еще существует в Python 3, он просто не имеет функций, перенесенных в глобальное пространство имен. Сценарий 2to3 достаточно умен, чтобы удалить определенные импорты, которые больше не существуют, оставив другие импортеры неповрежденными.

Подробнее here

+1

Хорошая ссылка. Благодаря! – pylang