Python 教程之控制流(14)Python__iter__()和__next__()将对象转换为迭代器

简介: Python 教程之控制流(14)Python__iter__()和__next__()将对象转换为迭代器

在许多情况下,我们需要像迭代器一样访问对象。一种方法是形成一个生成器循环,但这会延长程序员的任务和时间。Python通过为此任务提供内置方法__iter__()来简化此任务。

iter()函数返回给定对象(数组、集合、元组等或自定义对象)的迭代器。它创建一个对象,可以使用 next() 函数一次访问一个元素,这在处理循环时通常派上用场。

语法:

iter(object)
iter(callable, sentinel)
  • 对象: 必须创建其迭代器的对象。它可以是集合对象(如列表或元组),也可以是用户定义的对象(使用 OOPS)。
  • Callable,  Sentinel:可调用表示可调用对象,哨兵是需要终止迭代的值,哨兵值表示迭代序列的结束。

例外:  

如果我们在所有元素都具有之后调用迭代器已迭代,则引发停止迭代错误。

__iter__() 函数返回一个迭代器对象,该对象遍历给定对象的每个元素。下一个元素可以通过__next__()函数访问。对于可调用的对象和哨兵值,将完成迭代,直到找到该值或到达元素的末尾。在任何情况下,都不会修改原始对象。

代码 #1 :

# 演示 iter() 基本用法的 Python 代码
listA = ['a','e','i','o','u']
iter_listA = iter(listA)
try:
  print( next(iter_listA))
  print( next(iter_listA))
  print( next(iter_listA))
  print( next(iter_listA))
  print( next(iter_listA))
  print( next(iter_listA)) #StopIteration error
except:
  pass

输出:

a
e
i
o
u

代码 #2 :

# 演示 iter() 基本用法的 Python 代码
lst = [11, 22, 33, 44, 55]
iter_lst = iter(lst)
while True:
  try:
    print(iter_lst.__next__())
  except:
    break

输出:

11
22
33
44
55

代码 #3 :

# 演示 iter() 基本用法的 Python 代码
listB = ['Cat', 'Bat', 'Sat', 'Mat']
iter_listB = listB.__iter__()
try:
  print(iter_listB.__next__())
  print(iter_listB.__next__())
  print(iter_listB.__next__())
  print(iter_listB.__next__())
  print(iter_listB.__next__()) #StopIteration error
except:
  print(" \nThrowing 'StopIterationError'",
          "I cannot count more.")

输出:

Cat
Bat
Sat
Mat
Throwing 'StopIterationError' I cannot count more.

代码 #4 : 用户定义的对象(使用 OOPS)

# 显示使用 OOPs 的迭代器() 的 Python 代码
class Counter:
  def __init__(self, start, end):
    self.num = start
    self.end = end
  def __iter__(self):
    return self
  def __next__(self):
    if self.num > self.end:
      raise StopIteration
    else:
      self.num += 1
      return self.num - 1
# 驱动代码
if __name__ == '__main__' :
  a, b = 2, 5
  c1 = Counter(a, b)
  c2 = Counter(a, b)
  # 方式 1-打印范围而不使用 iter()
  print ("Print the range without iter()")
  for i in c1:
    print ("Eating more Pizzas, counting ", i, end ="\n")
  print ("\nPrint the range using iter()\n")
  当引发停止网站时,打印自定义消息
  # 方式 2- 使用 iter()
  obj = iter(c2)
  try:
    while True: # Print till error raised
      print ("Eating more Pizzas, counting ", next(obj))
  except:
    # 当引发停止网站时,打印自定义消息
    print ("\nDead on overfood, GAME OVER")

输出

Print the range without iter()
Eating more Pizzas, counting  2
Eating more Pizzas, counting  3
Eating more Pizzas, counting  4
Eating more Pizzas, counting  5
Print the range using iter()
Eating more Pizzas, counting  2
Eating more Pizzas, counting  3
Eating more Pizzas, counting  4
Eating more Pizzas, counting  5
Dead on overfood, GAME OVER



目录
相关文章
|
11天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
22天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
197 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
2月前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
43 2
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
87 8
|
2月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
57 4
|
2月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
155 7
|
9月前
|
开发者 Python
Python对象和类
Python对象和类
34 0
|
Python 容器
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
160 0
【Python零基础入门篇 · 20】:可迭代对象和迭代器的转换、自定义迭代器类、异常类、生成器
|
索引 Python
Python的对象与类
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。首先需要明确,面向对象编程不是python独有的;面向对象是一种编程思想;在面向对象的思想中万物都是对象。
143 0
Python的对象与类
|
Python
【Python面线对象进阶⑤】——枚举类enum
枚举类,在企业开发中用的比较多 当我们需要定义常量时,一个办法是用大写的变量通过整数来定义。
247 0
【Python面线对象进阶⑤】——枚举类enum

热门文章

最新文章

推荐镜像

更多