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

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

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

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

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


示例 1:

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

BB

代码

next("GFG")

**输出:**
```python
Traceback (most recent 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
目录
相关文章
|
1天前
|
Python
SciPy 教程 之 SciPy 图结构 7
《SciPy 教程 之 SciPy 图结构 7》介绍了 SciPy 中处理图结构的方法。图是由节点和边组成的集合,用于表示对象及其之间的关系。scipy.sparse.csgraph 模块提供了多种图处理功能,如 `breadth_first_order()` 方法可按广度优先顺序遍历图。示例代码展示了如何使用该方法从给定的邻接矩阵中获取广度优先遍历的顺序。
9 2
|
2天前
|
算法 Python
SciPy 教程 之 SciPy 图结构 5
SciPy 图结构教程,介绍图的基本概念和SciPy中处理图结构的模块scipy.sparse.csgraph。重点讲解贝尔曼-福特算法,用于求解任意两点间最短路径,支持有向图和负权边。通过示例演示如何使用bellman_ford()方法计算最短路径。
11 3
|
2天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
8 1
|
3天前
|
算法 索引 Python
SciPy 教程 之 SciPy 图结构 3
SciPy 图结构教程:介绍图的基本概念、节点和边的定义,以及如何使用 SciPy 的 `scipy.sparse.csgraph` 模块处理图结构。重点讲解 Dijkstra 最短路径算法及其在 SciPy 中的应用,包括 `dijkstra()` 方法的参数设置和使用示例。
8 0
|
C# Python
Python中的module,library,package之间的区别
背景 Python中有一些基本的名词,很多人,尤其是一些初学者,可能听着就很晕。 此处,简单总结一下,module,library,package之间的大概区别。 Python中的module的简介 module,中文翻译为:模块 Python中的module,说白了,就是Python文件,而python文件一般后缀为py,所以就是你的xxx.py而已。
1734 0
|
14天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
8天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
1天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
10 5
|
1天前
|
人工智能 数据挖掘 开发者
探索Python编程:从基础到进阶
【10月更文挑战第32天】本文旨在通过浅显易懂的语言,带领读者从零开始学习Python编程。我们将一起探索Python的基础语法,了解如何编写简单的程序,并逐步深入到更复杂的编程概念。文章将通过实际的代码示例,帮助读者加深理解,并在结尾处提供练习题以巩固所学知识。无论你是编程新手还是希望提升编程技能的开发者,这篇文章都将为你的学习之旅提供宝贵的指导和启发。
|
13天前
|
弹性计算 安全 小程序
编程之美:Python让你领略浪漫星空下的流星雨奇观
这段代码使用 Python 的 `turtle` 库实现了一个流星雨动画。程序通过创建 `Meteor` 类来生成具有随机属性的流星,包括大小、颜色、位置和速度。在无限循环中,流星不断移动并重新绘制,营造出流星雨的效果。环境需求为 Python 3.11.4 和 PyCharm 2023.2.5。