0
点赞
收藏
分享

微信扫一扫

Python 教程之控制流(15)可迭代和迭代器之间的区别

林肯公园_97cc 2022-10-09 阅读 108

  • 💂 个人网站:【海拥】【​摸鱼小游戏】【​学习文档
  • 🤟 风趣幽默的前端学习课程
  • 💅 想寻找共同学习交流、摸鱼划水的小伙伴
  • 💬 免费且实用的 Python 刷题(面经大全)网站

可迭代是一个对象,可以迭代。它在传递给iter()方法时生成一个迭代器。迭代器是一个对象,用于使用__next__()方法循环访问可迭代对象。迭代器具有__next__()方法,该方法返回对象的下一项。

注意: 每个迭代器也是可迭代的,但并非每个可迭代器都是 Python 中的迭代器。

例如,列表是可迭代的,但列表不是迭代器。可以使用函数 iter() 从可迭代对象创建迭代器。为了实现这一点,对象的类需要一个方法__iter__,它返回一个迭代器,或者一个__getitem__方法,其顺序索引以 0 开头。

示例 1:

我们知道 str 是可迭代的,但它不是迭代器。如果我们在for循环中运行它来打印字符串,那么这是可能的,因为当for循环执行时,它会转换为迭代器来执行代码。

BB

代码

next("GFG")

call last):
File "/home/1c9622166e9c268c0d67cd9ba2177142.py", line 2, in <module>
next("GFG")
TypeError: 'str' object is not an iterator

这里iter( )正在将字符串(可迭代)的s转换为迭代器,并首次打印G,我们可以多次调用以迭代字符串。

当执行 for 循环时,for 语句在对象上调用 iter(),它应该循环访问该对象。
如果此调用成功,则迭代器调用将返回一个迭代器对象,该对象定义方法 next(),该方法一次访问一个对象的元素。

# 代码
s="GFG"
s=iter(s)
print(s)
print(next(s))
print(next(s))
print(next(s))

输出:

<str_iterator object at 0x7f822a9c3210>
G
F
G

如果没有其他可用的元素,next() 方法将引发停止站点异常。
for 循环将在捕获停止站点异常后立即终止。
让我们使用 next() 内置函数调用__next__() 方法。

示例 2:

如果对象“obj”是可迭代的,则函数“可迭代”将返回 True,否则返回 False。

# 城市列表
cities = ["Berlin", "Vienna", "Zurich"]

# 初始化对象
iterator_obj = iter(cities)

print(next(iterator_obj))
print(next(iterator_obj))
print(next(iterator_obj))

输出:

Berlin
Vienna
Zurich

注意: 如果再次调用“next(iterator_obj)”,它将返回“停止站点”。

示例 3:

检查对象是否可迭代。

# 检查对象是否可迭代的函数
def it(ob):
try:
iter(ob)
return True
except TypeError:
return False

# 驱动程序代码
for i in [34, [4, 5], (4, 5),
{"a":4}, "dfsdf", 4.5]:

print(i,"is iterable :",it(i))

输出:

34 is iterable : False
[4, 5] is iterable : True
(4, 5) is iterable : True
{'a': 4} is iterable : True
dfsdf is iterable : True
4.5 is iterable : False

举报

相关推荐

0 条评论