В первую очередь модуль itertools невероятно полезен для всех случаев, когда итератор был бы полезен, но вот все, что вам нужно для создания итератора в python:
yield
blockquote>
Разве это не круто? Выход можно использовать для замены нормального возврата в функции. Он возвращает объект одинаково, но вместо уничтожения состояния и выхода он сохраняет состояние, когда вы хотите выполнить следующую итерацию. Вот пример этого в действии, вытащенный непосредственно из списка функций itertools :
def count(n=0):
while True:
yield n
n += 1
Как указано в описании функций (это функция count () из модуля itertools ...), он создает итератор, который возвращает последовательные целые числа, начиная с n.
. Выражения генератора - это целая другая червь червей (удивительные черви!). Они могут использоваться вместо List Consrehension для сохранения памяти (для понимания списка создается список в памяти, который уничтожается после использования, если не назначен переменной, но выражения генератора могут создавать объект Generator. который является причудливым способом сказать Итератор). Ниже приведен пример определения выражения генератора:
gen = (n for n in xrange(0,11))
Это очень похоже на наше определение итератора выше, за исключением того, что полный диапазон задан в пределах от 0 до 10.
I только что нашел xrange () (удивил, что я не видел его раньше ...) и добавил его к приведенному выше примеру. xrange () - это итерируемая версия range (), которая имеет то преимущество, что не создала список. Было бы очень полезно, если бы у вас был гигантский массив данных для перебора и у него было столько памяти, чтобы сделать это.