Итерации и итераторы в Python
В этом уроке вы узнаете об итерациях и итераторах Python.
Введение в итерации Python
В Python итерируемый объект — это объект, который включает ноль, один или множество элементов. Итерируемый объект имеет возможность возвращать свои элементы по одному.
Благодаря этой функции вы можете использовать цикл for для перебора итерируемого объекта.
Фактически, функция range() является итерируемой, поскольку вы можете перебирать ее результат:
for index in range(3): print(index)
Выход:
0 1 2
Кроме того, строка является итерируемой, поскольку для ее перебора можно использовать цикл:
str = 'Iterables' for ch in str: print(ch)
Списки и кортежи также являются итерируемыми, поскольку по ним можно выполнять цикл. Например:
ranks = ['high', 'medium', 'low'] for rank in ranks: print(rank)
Эмпирическое правило заключается в том, что если вы знаете, можно ли что-то перебрать, это итерируемо.
Что такое итератор
Итерируемый объект можно перебирать. Итератор — это агент, выполняющий итерацию.
Чтобы получить итератор из итерируемого объекта, вы используете функцию iter(). Например:
colors = ['red', 'green', 'blue'] colors_iter = iter(colors)
Если у вас есть итератор, вы можете получить следующий элемент из итерируемого объекта, используя функцию next():
colors = ['red', 'green', 'blue'] colors_iter = iter(colors) color = next(colors_iter) print(color)
Выход:
red
Каждый раз, когда вы вызываете функцию next(), она возвращает следующий элемент в итерации. Например:
colors = ['red', 'green', 'blue'] colors_iter = iter(colors) color = next(colors_iter) print(color) color = next(colors_iter) print(color) color = next(colors_iter) print(color)
Выход:
red green blue
Если элемента больше нет и вы вызываете функцию next(), вы получите исключение.
colors = ['red', 'green', 'blue'] colors_iter = iter(colors) color = next(colors_iter) print(color) color = next(colors_iter) print(color) color = next(colors_iter) print(color) # cause an excpetion color = next(colors_iter) print(color)
В этом примере сначала показаны три элемента списка цветов, а затем выдается исключение:
red green blue Traceback(most recent call last): File "iterable.py", line 15, in <module> color = next(colors_iter) StopIteration
Итератор имеет состояние. Это означает, что как только вы получите элемент из итератора, он исчезнет.
Другими словами, как только вы завершите цикл по итератору, он станет пустым. Если вы повторите его еще раз, он ничего не вернет.
Поскольку вы можете перебирать итератор, итератор также является итерируемым объектом. Это довольно запутанно. Например:
colors = ['red', 'green', 'blue'] iterator = iter(colors) for color in iterator: print(color)
Выход:
red green blue
Если вы вызовете функцию iter() и передадите ей итератор, она вернет тот же итератор обратно.
Позже вы научитесь создавать итерации.
Заключение
- Итерируемый объект — это объект, по которому можно выполнять итерацию. Итерируемый объект имеет возможность возвращать один из своих элементов за раз.
- Итератор — это агент, выполняющий итерацию. Это важно. Итератор также является итерируемым объектом.
- Используйте функцию iter(), чтобы получить итератор из итерируемого объекта, и функцию next(), чтобы получить следующий элемент из итерируемого объекта.