Итератор в python — это объект, который используется для перебора повторяющихся объектов, таких как списки, кортежи, диктанты и наборы. Объект итератора инициализируется с помощью iter() метод. Он использует next() метод итерации.
- __iter(iterable)__ метод, вызываемый для инициализации итератора. Это возвращает объект итератора
- next ( __next__ in Python 3) Следующий метод возвращает следующее значение для итерируемого. Когда мы используем цикл for для обхода любого итерируемого объекта, внутренне он использует метод iter() для получения объекта-итератора, который в дальнейшем использует метод next() для итерации. Этот метод вызывает остановку, чтобы сигнализировать об окончании итерации.
Как итератор действительно работает в python
# Here is an example of a python inbuilt iterator
# value can be anything which can be iterate
iterable_value = 'Geeks'
iterable_obj = iter(iterable_value)
while True:
try:
# Iterate by calling next
item = next(iterable_obj)
print(item)
except StopIteration:
# exception will happen when iteration will over
break
Выход:
G
e
e
к
с
Ниже приведен простой пользовательский итератор Python, который создает тип итератора, который повторяется от 10 до заданного предела. Например, если ограничение равно 15, то оно выводит 10 11 12 13 14 15. И если предел равен 5, то он ничего не печатает.
# A simple Python program to demonstrate
# working of iterators using an example type
# that iterates from 10 to given value
# An iterable user defined type
class Test:
# Constructor
def __init__(self, limit):
self.limit = limit
# Creates iterator object
# Called when iteration is initialized
def __iter__(self):
self.x = 10
return self
# To move to next element. In Python 3,
# we should replace next with __next__
def __next__(self):
# Store current value ofx
x = self.x
# Stop iteration if limit is reached
if x > self.limit:
raise StopIteration
# Else increment and return old value
self.x = x + 1;
return x
# Prints numbers from 10 to 15
for i in Test(15):
print(i)
# Prints nothing
for i in Test(5):
print(i)
Выход:
10
11
12
13
14
15
В следующих итерациях цикл for внутренне(мы его не видим) использует объект итератора для обхода итераций
# Sample built-in iterators
# Iterating over a list
print("List Iteration")
l = ["geeks", "for", "geeks"]
for i in l:
print(i)
# Iterating over a tuple (immutable)
print("\nTuple Iteration")
t = ("geeks", "for", "geeks")
for i in t:
print(i)
# Iterating over a String
print("\nString Iteration")
s = "Geeks"
for i in s :
print(i)
# Iterating over dictionary
print("\nDictionary Iteration")
d = dict()
d['xyz'] = 123
d['abc'] = 345
for i in d :
print("%s %d" %(i, d[i]))
Выход:
List Iteration
geeks
for
geeks
Tuple Iteration
geeks
for
geeks
String Iteration
G
e
e
k
s
Dictionary Iteration
xyz 123
abc 345