You are currently viewing Итераторы в Python

Итераторы в Python

Итератор в python — это объект, который используется для перебора повторяющихся объектов, таких как списки, кортежи, диктанты и наборы. Объект итератора инициализируется с помощью iter() метод. Он использует next() метод итерации.

  1. __iter(iterable)__ метод, вызываемый для инициализации итератора. Это возвращает объект итератора
  2. 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