Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 114

True

>>> another_palindrome('halibut')

False

Итерируем по структурам кода

с помощью itertools

itertools содержит особые функции итератора. Каждая из них возвращает один

элемент при каждом вызове из цикла for … in и запоминает свое состояние между

вызовами.

Функция chain() проходит по своим аргументам, как если бы они были единым

итерабельным объектом:

>>> import itertools

>>> for item in itertools.chain([1, 2], ['a', 'b']):

... print(item)

...

1

2

a

b

154

Глава 5. Py Boxes: модули, пакеты и программы

Функция cycle() является бесконечным итератором, проходящим в цикле по

своим аргументам:

>>> import itertools

>>> for item in itertools.cycle([1, 2]):

... print(item)

...

1

2

1

2

.

.

.

…и т. д.

Функция accumulate() подсчитывает накопленные значения. По умолчанию она

высчитывает сумму:

>>> import itertools

>>> for item in itertools.accumulate([1, 2, 3, 4]):

... print(item)

...

1

3

6

10

В качестве второго аргумента функции accumulate() вы можете передать функ-

цию, и она будет использована вместо сложения. Функция должна принимать два

аргумента и возвращать одно значение. В этом примере высчитывается произве-

дение:

>>> import itertools

>>> def multiply(a, b):