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
    
  • 相关阅读:
    wpf arcgis engine 当前没有或未启用Spatial Analyst许可解决办法
    arcglobe 图层三大类说明
    sql自带函数语句
    wpf 前台获取资源文件路径问题
    Microsoft.Office.Interop.Excel的用法
    WPF:父窗口与子窗口的层次关系
    wpf 拖图片到窗体
    wpf comboBox取值问题
    wpf 窗体内容旋转效果 网摘
    js拖动滑块
  • 原文地址:https://www.cnblogs.com/klvchen/p/8820507.html
Copyright © 2011-2022 走看看