zoukankan      html  css  js  c++  java
  • Python 迭代器

    迭代器都满足两个条件:
    1.有 iter 方法
    2.有 next 方法

    生成器都是迭代器,迭代器不一定是生成器
    list, tuple, dict, string 都是 Iterable (可迭代对象)

    from collections import Iterable, Iterator
    
    l = [1, 2, 3, 4, 5]
    d = iter(l)                     # 调用 l.__iter__() 方法
    print(d)                        # list_iterator
    print(next(d))
    print(isinstance(l, list))      # True
    print(isinstance(l, Iterable))  # True
    print(isinstance(l, Iterator))  # False
    print(isinstance(d, Iterator))  # True
    
    运行结果:
    <list_iterator object at 0x00000242BD844DA0>
    1
    True
    True
    False
    True
    

    这里 l 是一个可迭代对象,可迭代对象是一种通俗的叫法,并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。 d 是迭代器,迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。
    迭代器有一种具体的迭代器类型,比如 list_iterator , set_iterator 。
    可迭代对象实现了__iter__和__next__方法(python2中是 next 方法,python3是__next__方法),这两个方法对应内置函数 iter() 和 next() 。__iter__方法返回可迭代对象本身,这使得他既是一个可迭代对象同时也是一个迭代器。

    for 循环内部三件事

    • 调用可迭代对象的 iter 方法返回一个迭代器对象
    • 不断调用迭代器对象的 next 方法
    • 处理 StopIteration
    for l in [1, 2, 3, 4, 5]:
        print(l)
    
    运行结果:
    1
    2
    3
    4
    5
    
  • 相关阅读:
    11.分类与监督学习,朴素贝叶斯分类算法
    9、主成分分析
    7.逻辑回归实践
    8、特征选择
    6.逻辑归回
    5.线性回归算法
    6.10第十四次作业
    6.2第十三次作业
    5.27第十二次作业
    5.20第十一次作业
  • 原文地址:https://www.cnblogs.com/klvchen/p/8820507.html
Copyright © 2011-2022 走看看