【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

相关内容

热门资讯

特朗普起诉BBC 索赔100亿... 据央视新闻报道,美国总统特朗普当地时间15日就英国广播公司(BBC)剪辑拼接其讲话一事提起诉讼,共索...
案件处理用时少一半!深圳福田区... 深圳商报·读创客户端首席记者 张玮玮 通讯员 司新宣 闵元元 陈小丽 文/图 身处深圳市金融业发展高...
香港法律界:黎智英案证据充分 ... 中新社香港12月16日电 (史元丰 温孟馨 邱兆翔)香港特区高等法院原讼法庭15日裁决黎智英两项串谋...
360回应网传“财务造假”事件... 封面新闻记者 雷强 近日,网上流传一张朋友圈截图,图中前360员工玉红自曝360集团财务造假。 12...
抢险救灾任务车辆免费通行规程明... 近日,交通运输部办公厅、应急管理部办公厅联合印发《执行抢险救灾任务车辆免费通行服务保障规程》(以下简...
*ST交投(002200)披露... 截至2025年12月16日收盘,*ST交投(002200)报收于7.47元,较前一交易日下跌2.35...
政策项目双驱动 吉林合作经济处... 央广网长春12月16日消息(记者郭明彤)12月16日,2025年吉林省农业农村工作盘点活动在吉林省农...
司法部副部长武增会见香港大律师... 12月16日上午,司法部副部长武增在京会见了由毛乐礼资深大律师带队的香港大律师公会访京团一行,就法律...
蓝黛科技(002765)披露子... 截至2025年12月16日收盘,蓝黛科技(002765)报收于11.47元,较前一交易日下跌3.21...
2025微短剧基地报告:产能分... 主编温静导读:2025年,微短剧基地已完成从产业配角到核心枢纽的身份蜕变,成为推动行业从“野蛮生长”...