【Python入门第二十四天】Python 迭代器
创始人
2024-05-28 22:06:45
0

Python 迭代器

迭代器是一种对象,该对象包含值的可计数数字。

迭代器是可迭代的对象,这意味着您可以遍历所有值。

从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 iter() 和 next()。

迭代器 VS 可迭代对象(Iterable)

列表、元组、字典和集合都是可迭代的对象。它们是可迭代的容器,您可以从中获取迭代器(Iterator)。

所有这些对象都有用于获取迭代器的 iter() 方法:

实例

从元组返回一个迭代器,并打印每个值:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)print(next(myit))
print(next(myit))
print(next(myit))

运行实例

apple
banana
cherry

甚至连字符串都是可迭代的对象,并且可以返回迭代器:

实例

字符串也是可迭代的对象,包含一系列字符:

mystr = "banana"
myit = iter(mystr)print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

运行实例

b
a
n
a
n
a

遍历迭代器

我们也可以使用 for 循环遍历可迭代对象:

实例

迭代元组的值:

mytuple = ("apple", "banana", "cherry")for x in mytuple:print(x)

运行实例

python_iterator_loop_1.py
apple
banana
cherry

实例

迭代字符串中的字符:

mystr = "banana"for x in mystr:print(x)

运行实例

python_iterator_loop_2.py
b
a
n
a
n
a

提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。

创建迭代器

要把对象/类创建为迭代器,必须为对象实现 iter() 和 next() 方法。

正如您在 Python 类/对象 一章中学到的,所有类都有名为 init() 的函数,它允许您在创建对象时进行一些初始化。

iter() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。

next() 方法也允许您执行操作,并且必须返回序列中的下一个项目。

实例

创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyclass = MyNumbers()
myiter = iter(myclass)print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

运行实例

python_iterator_create_1.py
1
2
3
4
5

StopIteration

如果你有足够的 next() 语句,或者在 for 循环中使用,则上面的例子将永远进行下去。

为了防止迭代永远进行,我们可以使用 StopIteration 语句。

next() 方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误:

实例

在 20 个迭代之后停止:

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)for x in myiter:print(x)

运行实例

python_iterator_create_2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

相关内容

热门资讯

范加尔:我早就说过曼联是一家商... 直播吧06月08日讯 今日曼联前主帅范加尔接受了《天空体育》的采访,再次强调“曼联是一家商业俱乐部,...
原创 特... 据环球时报消息,马斯克对“大而美”法案开炮,美众议院议长:给他打了电话但没接,还会再打。在美国政府效...
2025中国海事商事仲裁高级别... 央广网北京6月8日消息(记者 樊瑞)当前,全球正处于新一轮科技革命和产业变革的历史交汇期,国际经贸格...
迪马济奥:米兰拒蓝军1500万... 直播吧6月8日讯 据迪马济奥报道,AC米兰已拒绝切尔西为迈尼昂开出的1500万英镑报价。 如果蓝军报...
外媒爆:乌克兰袭击造成俄军超过... 据路透社6月7日报道,一名德国高级将领表示,上周末乌克兰发动的无人机袭击可能造成约10%的俄罗斯战略...
游客停车被餐馆老板围殴,法律不... ▲游客因停车被围殴,引发了舆论关注。图/社交平台视频截图 游客停车被围殴一事,迎来了官方通报。 据报...
比亚迪李云飞回应“常压油箱”事... 央广网北京6月6日消息 针对近期引起市场关注的“常压油箱”事件,6月8日,比亚迪品牌及公关处总经理李...
“人大代表+法院+调解员”绘就... “法治是最好的营商环境。湖南法院坚持将新时代‘枫桥经验’与法治护航陶瓷产业发展相结合,倾力打造‘代表...
游客被打事件泾县警方多人被追责... 极目新闻评论员 吴双建 6月8日,安徽泾县联合调查组通报,2025年6月6日,游客蔡某通过网络反映其...
一娃难求的Labubu,捧出河... 如今,河南 “消费三象”胖东来、蜜雪冰城和泡泡玛特,已成为商超、茶饮、潮玩领域 “新标杆”。 相较其...