Python 迭代器是一个对象,其中包含可计数的数值或元素。你可以使用它来遍历所有这些元素。迭代器使用名为 `__iter__()` 和 `__next__()` 的特殊方法来遍历对象元素。
Python 迭代器与可迭代对象
如果我们能从中获取迭代器,我们就称该对象为可迭代对象。到目前为止,我们已经看到了列表、元组、集合和字典等对象。你可以从这些对象中调用 `iter()`。本节将解释如何使用此类并创建我们自己的无限迭代器,并提供实际示例。
字符串迭代器示例
在此编程语言中,字符串是可迭代对象。这里,我们使用 for 循环遍历字符串中的每个字符并返回该字符。默认情况下,或者说,for 循环会在您不知情的情况下实现迭代器对象概念。
stri = 'tutorialgateway'
for x in stri:
print(x, end = ' ')
t u t o r i a l g a t e w a y
For 循环迭代器示例
在此示例中,我们同时使用了 for 循环和此。在此 Python 编程语言中,我们必须使用 `next()` 函数来从迭代器中返回一个元素或值。
请记住,`next()` 方法一次返回一个项目。因此,对于 n 个项目,您必须使用 n 个 `next()` 语句。这里,我们只使用了一次 `next()`。所以,它返回字符串中的第一个字符。
stng = 'tutorialgateway'
for x in stng:
print(x, end = ' ')
print("\n**** Output *****")
itr = iter(stng)
print(next(itr))
t u t o r i a l g a t e w a y
**** Output *****
t
我将使用 `next()` 来遍历字符串中的所有字符。这次,迭代器编写了完整的字符串。
sting = 'tutorialgateway'
for x in sting:
print(x, end = ' ')
print("\n**** Example *****")
itr = iter(sting)
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
t u t o r i a l
**** Example *****
t
u
t
o
r
i
a
l
Python 列表迭代器示例
在此示例中,我们展示了如何遍历 列表 项目并打印它们。
numbers = [10, 20, 30, 40, 50] itr = iter(numbers) print(next(itr)) print(next(itr)) print(next(itr)) print(next(itr)) print(next(itr))
10
20
30
40
50
在此示例中,我们使用了 `__next__()` 特殊方法。如果您观察最后一条语句,我们试图返回不存在的下一个元素。这就是为什么 `iter` 被称为 `StopIteration`。
numbers = [10, 20, 30, 40, 50] itr = iter(numbers) print(itr.__next__()) print(itr.__next__()) print(itr.__next__()) print(itr.__next__()) print(itr.__next__()) print(itr.__next__())

集合迭代器示例
您可以使用此来遍历集合项并返回对象。此程序遍历 集合 中的数字并打印其中的每一个。
mySet = {1, 2, 3, 4, 5}
ittr = iter(mySet)
print(ittr.__next__())
print(ittr.__next__())
print(ittr.__next__())
print(ittr.__next__())
print(ittr.__next__())
1
2
3
4
5
元组示例
迭代器对象还可以让您在元组上使用它。此程序迭代 元组 项目并在元组中打印每个项目。
fruits = ('Apple', 'Orange', 'Grape', 'Banana', 'Kiwi')
fruit_itr = iter(fruits)
print(next(fruit_itr))
print(next(fruit_itr))
print(next(fruit_itr))
print(next(fruit_itr))
print(next(fruit_itr))
Apple
Orange
Grape
Banana
Kiwi
在 Python 中创建自己的迭代器
这是一个名为 Counter 的简单类。在此示例中,我们首先在 `__init__` 方法中声明了一个最大值。 `__iter__` 方法用于初始化可迭代对象的值。目前,我们将数字设置为 0。这意味着迭代器从 0 开始。
`__next__` 方法用于从对象中选择下一个元素。在此 Python 方法中,我们使用了 If Else 语句 来检查下一个数字是否大于最大值。如果为 True,则会引发 StopIteration 错误。否则,数字将递增。
class Counter:
def __init__(self, maximum):
self.maximum = maximum
def __iter__(self):
self.number = 0
return self
def __next__(self):
number = self.number
if number > self.maximum:
raise StopIteration
else:
self.number = number + 1
return number
numbers = Counter(10)
a = iter(numbers)
print(next(a))
print(next(a))
print(next(a))

上面的代码显示了从 0 到 2 的数字。这是因为我们只使用了 3 次 `next(a)`。在此迭代器程序中,我们使用 for 循环以最大值为 10 迭代 Counter 类。这将打印从 0 到 10 的值。 `__iter__()` 从 0 开始,而 `__next__()` 打印到 10 的元素。
class Counter:
def __init__(self, maximum):
self.maximum = maximum
def __iter__(self):
self.number = 0
return self
def __next__(self):
number = self.number
if number > self.maximum:
raise StopIteration
else:
self.number = number + 1
return number
for t in Counter(10):
print(t)
0
1
2
3
4
5
6
7
8
9
10
Python 无限迭代器类
在创建自己的迭代器时,您应该始终小心无限循环。如果您忘记引发错误,您将陷入无限循环。这是一个无限迭代器对象的简单示例。它与上面的示例相同,但我们删除了 If 语句。
class Counter:
def __iter__(self):
self.number = 0
return self
def __next__(self):
number = self.number
self.number = number + 1
return number
numbers = Counter()
a = iter(numbers)
print(next(a))
print(next(a))
print(next(a))
0
1
2
尽管上面的示例是一个无限迭代器,但您可能没有注意到它。这是因为我们只使用了 3 次 `next()`。所以,让我使用 Counter 类 for 循环来调用一个 iter 函数。请参考 字典 文章。
class Counter:
def __iter__(self):
self.num = 0
return self
def __next__(self):
num = self.num
self.num = num + 1
return num
for t in Counter():
print(t)
现在您可以看到无限对象了。它会连续执行。
267
268
269
270
271
272
273