• Python笔记(十六):迭代器


    (一)iterable对象和Iterator对象的区别

        iterable对象(可迭代的对象):可以使用for循环,例如:字符串、列表 、字典 、集合等

        Iterator对象(迭代器):除了可以用for循环外,还可以用next()不断获取下一个元素.

        __iter__() 和__next__()这2个方法都实现了的,就是Iterator。只实现__iter__() 方法的就是iterable。

     1 from collections import Iterable
     2 from collections import Iterator
     3 
     4 class peo():
     5 
     6     def __init__(self,x):
     7         self.x = x
     8     def __iter__(self):
     9         return self
    10 
    11 
    12 p = peo([1,2,3,4])
    13 
    14 print(isinstance(p,Iterable)) #判断是否是Iterable对象
    15 print(isinstance(p,Iterator))

    __iter__() 和__next__()2个方法都实现的,才是迭代器:Iterator

     1 from collections import Iterable
     2 from collections import Iterator
     3 
     4 class peo():
     5 
     6     def __init__(self,x):
     7         self.x = x
     8     def __iter__(self):
     9         return self
    10     def __next__(self):
    11         return self
    12 
    13 p = peo([1,2,3,4])
    14 
    15 print(isinstance(p,Iterable))
    16 print(isinstance(p,Iterator))

    所以,Iterator对象肯定也是iterable对象,但iterable对象却不一定是Iterator对象。

    我们可以使用next()不断获取Iterator对象的下一个元素,直到抛出StopIteration错误

    1 the_iter = iter([1,2,3])
    2 
    3 print(next(the_iter))
    4 print(next(the_iter))
    5 print(next(the_iter))
    6 
    7 print(next(the_iter))

      

    (二)for循环的工作方式

    在上面的例子中,实际可以用for循环.

    1 the_iter = iter([1,2,3])
    2 
    3 
    4 for i in the_iter:
    5     print(i)

    for循环的工作方式:上面这段代码实际上和下面这段代码是一样的

     1 the_iter = iter([1,2,3])
     2 
     3 
     4 
     5 while True:
     6     try:
     7         element = next(the_iter)
     8         print(element)
     9     except StopIteration:
    10         # 如果抛出异常,退出循环
    11         break
  • 相关阅读:
    Build MySQL 5.7.4 in RedHat
    glibc-2.19 之 strlen 实现
    [部署问题列表]
    [数据链路排查]
    VS配置本地IIS以域名访问
    SQL系列函数——数学函数
    面向对象编程的几个原则
    SQL系列函数——字符串函数
    SQL数据类型
    DHtmlx组件获取选中行的某一列对应的值
  • 原文地址:https://www.cnblogs.com/simple-free/p/9305205.html
Copyright © 2020-2023  润新知