Python3中可迭代对象和迭代器对象有何区别?

2026-05-24 15:501阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计725个文字,预计阅读时间需要3分钟。

Python3中可迭代对象和迭代器对象有何区别?

通过一段简单的代码来理解可迭代对象与迭代器对象:a=[1, 2, 3, 4] for i in a: print(i) 这段代码非常简单,它对列表a进行遍历,然后打印出每个元素。这展示了迭代器的基本用法。

可迭代对象与迭代器对象

通过一段简单的代码来理解这俩个概念

a = [1,2,3,4]
for i in a:
print(i)

这段代码很简单, 对 a 这个列表进行遍历, 然后打印输出每个元素, 那么遍历具体进行了那些操作呢?

  • 首先需要确定 a(遍历的目标)要是一个可迭代对象
  • 如果 a 是一个可迭代对象, 就由 a 的内置方法​​__iter__()​​ 来生成一个迭代器对象, 这里在 python2 里面 字符串是没有​​__iter__()​​​ 方法的, 用​​__getitem__()​​​ 来代替, 不过 python3 已经统一为​​__iter__()​​ 了
  • 然后通过迭代器对象 调用​​__next__()​​​ 来遍历, Python2 中 通过迭代器对象来调用​​.next()​​ 方法
  • a = [1,2,3,4]
    iterator = a.__iter__() # 通过可迭代对象的 __iter__() 来生成一个迭代器对象
    print(next(iterator)) #调用内置函数的 next()
    print(next(iterator)) #或者 next.__next__()
    print(next(iterator))
    print(next(iterator))
    print(next(iterator))

    输出结果:

    1
    2
    3
    4
    Traceback (most recent call last):
    File "/home/wshuo/Desktop/python3高级用法/test.py", line 7, in <module>
    print(next(iterator))
    StopIteration

    当调用到最后的时候 抛出了一个 ​​StopIteration​​ 的报错, for循环就是通过这个报错来停止迭代的

    下面一个小例子, 我们自己写一个 可迭代对象和迭代器对象

    from collections import Iterable, Iterator

    # 自定义了一个迭代器对象, 继承迭代器对象
    class MeIterator(Iterator):
    def __init__(self, num_list):
    self.num_list = num_list
    self.index = 0

    def control(self,n):
    s = n +1
    return s

    # 自定义 __next__()方法, 为了for 循环调用
    def __next__(self):
    if self.index == len(self.num_list):
    raise StopIteration

    result = self.control(self.num_list[self.index])
    self.index += 1
    return result

    # 自定义一个可迭代对象,继承可迭代对象
    class MeIterable(Iterable):

    def __init__(self, num_list):
    self.num_list = num_list

    # 通过__iter__方法返回迭代器对象
    def __iter__(self):
    return MeIterator(self.num_list)

    # 测试程序
    for i in MeIterable([1, 2, 3]):
    print(i)

    输出结果:

    2
    3
    4

    这里其实也可以不去继承 Iterable 和 Iterator 这俩个类, 不过需要在你自定义的 生成器 里面 加上 ​​__iter__()​​ 方法, 然后返回自身, 因为不仅是 可迭代对象有这个接口, 迭代器也有这个接口, 而继承了 Iterator 就不需要写这个接口了


    Python3中可迭代对象和迭代器对象有何区别?

    本文来自博客园,作者:​​Hello_wshuo​​​,转载请注明原文链接:​​javascript:void(0)p/15622267.html​​


    本文共计725个文字,预计阅读时间需要3分钟。

    Python3中可迭代对象和迭代器对象有何区别?

    通过一段简单的代码来理解可迭代对象与迭代器对象:a=[1, 2, 3, 4] for i in a: print(i) 这段代码非常简单,它对列表a进行遍历,然后打印出每个元素。这展示了迭代器的基本用法。

    可迭代对象与迭代器对象

    通过一段简单的代码来理解这俩个概念

    a = [1,2,3,4]
    for i in a:
    print(i)

    这段代码很简单, 对 a 这个列表进行遍历, 然后打印输出每个元素, 那么遍历具体进行了那些操作呢?

  • 首先需要确定 a(遍历的目标)要是一个可迭代对象
  • 如果 a 是一个可迭代对象, 就由 a 的内置方法​​__iter__()​​ 来生成一个迭代器对象, 这里在 python2 里面 字符串是没有​​__iter__()​​​ 方法的, 用​​__getitem__()​​​ 来代替, 不过 python3 已经统一为​​__iter__()​​ 了
  • 然后通过迭代器对象 调用​​__next__()​​​ 来遍历, Python2 中 通过迭代器对象来调用​​.next()​​ 方法
  • a = [1,2,3,4]
    iterator = a.__iter__() # 通过可迭代对象的 __iter__() 来生成一个迭代器对象
    print(next(iterator)) #调用内置函数的 next()
    print(next(iterator)) #或者 next.__next__()
    print(next(iterator))
    print(next(iterator))
    print(next(iterator))

    输出结果:

    1
    2
    3
    4
    Traceback (most recent call last):
    File "/home/wshuo/Desktop/python3高级用法/test.py", line 7, in <module>
    print(next(iterator))
    StopIteration

    当调用到最后的时候 抛出了一个 ​​StopIteration​​ 的报错, for循环就是通过这个报错来停止迭代的

    下面一个小例子, 我们自己写一个 可迭代对象和迭代器对象

    from collections import Iterable, Iterator

    # 自定义了一个迭代器对象, 继承迭代器对象
    class MeIterator(Iterator):
    def __init__(self, num_list):
    self.num_list = num_list
    self.index = 0

    def control(self,n):
    s = n +1
    return s

    # 自定义 __next__()方法, 为了for 循环调用
    def __next__(self):
    if self.index == len(self.num_list):
    raise StopIteration

    result = self.control(self.num_list[self.index])
    self.index += 1
    return result

    # 自定义一个可迭代对象,继承可迭代对象
    class MeIterable(Iterable):

    def __init__(self, num_list):
    self.num_list = num_list

    # 通过__iter__方法返回迭代器对象
    def __iter__(self):
    return MeIterator(self.num_list)

    # 测试程序
    for i in MeIterable([1, 2, 3]):
    print(i)

    输出结果:

    2
    3
    4

    这里其实也可以不去继承 Iterable 和 Iterator 这俩个类, 不过需要在你自定义的 生成器 里面 加上 ​​__iter__()​​ 方法, 然后返回自身, 因为不仅是 可迭代对象有这个接口, 迭代器也有这个接口, 而继承了 Iterator 就不需要写这个接口了


    Python3中可迭代对象和迭代器对象有何区别?

    本文来自博客园,作者:​​Hello_wshuo​​​,转载请注明原文链接:​​javascript:void(0)p/15622267.html​​