标签:遍历 迭代 Python 入门教程 36 iter next color colors
本篇我们介绍 Python 中的可遍历对象(iterable)与迭代器(iterator),以及它们之间的区别。
可遍历对象
在 Python 中,可遍历对象是指包含零个、一个或者多个元素的对象。
可遍历对象支持一次返回一个元素,因此我们可以使用 for 循环遍历这类对象。
实际上,range() 函数就是一个可遍历的对象,因为我们可以遍历它的结果:
for index in range(3):
print(index)
输出结果如下:
0
1
2
同理,字符串也是一种可遍历对象,因为我们可以使用 for 循环遍历字符串:
str = 'Iterables'
for ch in str:
print(ch)
列表和元组也都是可遍历的对象,我们可以对它们进行遍历。例如:
ranks = ['high', 'medium', 'low']
for rank in ranks:
print(rank)
原则就是,如果某种对象可以遍历,它就是可遍历对象。
迭代器
可遍历对象可以进行迭代,迭代器(iterator)就是执行迭代操作时的代理对象。
如果想要获取可遍历对象的迭代器,可以使用 iter() 函数。例如:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
一旦我们获得了迭代器,就可以利用 next() 函数获取可遍历对象中的下一个元素:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
输出结果如下:
red
每次调用 next() 函数都会返回可遍历对象的下一个元素。例如:
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
输出结果如下:
red
green
blue
如果遍历完所有元素之后,再次调用 next() 函数,将会返回一个异常。
colors = ['red', 'green', 'blue']
colors_iter = iter(colors)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
color = next(colors_iter)
print(color)
# 返回异常
color = next(colors_iter)
print(color)
以上示例首先会返回 colors 列表中的三个元素,然后抛出一个异常:
red
green
blue
Traceback (most recent call last):
File "iterable.py", line 15, in <module>
color = next(colors_iter)
StopIteration
迭代器是有状态的,意味着一旦我们使用了迭代器中的元素,它就不再存在。也就是说,一旦我们遍历完整个迭代器,它就会变成一个空的迭代器。如果我们再次遍历这个迭代器,它不会返回任何内容。
由于我们可以遍历迭代器,因此迭代器也是一种可遍历对象。这一点比较令人困惑。例如:
colors = ['red', 'green', 'blue']
iterator = iter(colors)
for color in iterator:
print(color)
输出结果如下:
red
green
blue
如果我们使用一个迭代器作为参数调用 iter() 函数,它会返回一个相同的迭代器。
我们会在后续课程中介绍如何创建可迭代对象。
总结
- 可遍历对象(iterable)是一种可以进行遍历的对象,它可以一次返回一个元素。
- 迭代器(iterator)是执行迭代操作时的代理对象。迭代器拥有状态,它也是一种可遍历对象。
- 使用 iter() 函数获取可遍历对象的迭代器,使用 next() 函数获取可迭代对象中的下一个元素。
标签:遍历,迭代,Python,入门教程,36,iter,next,color,colors 来源: https://blog.csdn.net/horses/article/details/122403582
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。