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



目录
相关文章
|
3天前
|
数据处理 Python
从零开始学迭代器生成器:打造高效、易读的Python代码
从零开始学迭代器生成器:打造高效、易读的Python代码
|
1天前
|
Shell Python
Python教程:return和yield的区别
Python教程:return和yield的区别
6 0
Python教程:return和yield的区别
|
4天前
|
数据采集 存储 数据处理
使用Python获取1688商品详情的教程
使用Python爬取1688商品详情,涉及requests库抓取页面、BeautifulSoup解析HTML,安装必要库如requests、beautifulsoup4、pandas和lxml。通过get_page发送请求,BeautifulSoup解析提取如标题、价格等信息。数据处理后可使用pandas保存至CSV。注意遵守法律法规和网站政策,避免频繁请求。[代码片段及更多详情见链接
|
15小时前
|
机器人 API 开发者
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
|
16小时前
|
数据采集 XML 存储
自动核对名单详细教程〖Python版〗
自动核对名单详细教程〖Python版〗
|
2天前
|
算法 Java 程序员
Python面相对象的编程
Python面相对象的编程
|
1月前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
9天前
|
存储 大数据 索引
Python迭代器与生成器概览
【6月更文挑战第20天】迭代器提供不依赖索引的元素访问,支持`__next__()`和`iter()`,惰性计算节省内存,但不可回溯且无长度。生成器是特殊的迭代器,用`yield`动态生成值,更节省内存,代码简洁。创建迭代器可通过`iter()`函数,而生成器通过`yield`函数或生成器表达式实现。在处理大数据时尤为有用。
14 2
|
14天前
|
算法 大数据 数据处理
Python 迭代器和生成器有什么用?
**Python 迭代器与生成器巧妙用法** 本文探讨了 Python 中迭代器和生成器的实际应用场景。迭代器通过 `__iter__()` 和 `__next__()` 方法支持迭代操作,适用于处理大数据或动态数据流。例如,创建一个 `CountDown` 类实现倒计时迭代。生成器简化代码,如 `fibonacci` 函数用于生成斐波那契数列。此外,迭代器可用于分页、连接多个迭代器和过滤数据。生成器则擅长处理大文件、生成无限序列和实现斐波那契数列,还可构建数据处理管道和使用生成器表达式。掌握这些技巧能提升代码效率和处理问题的能力
|
27天前
|
大数据 Python 数据采集
Python中的迭代器与生成器:高效处理大数据集的利器
Python中的迭代器和生成器是处理大数据集时的利器,它们能够高效地处理大量数据而不会占用太多内存。本文将介绍迭代器和生成器的概念、使用方法以及在处理大数据集时的优势,并通过示例代码演示它们的应用。