zoukankan      html  css  js  c++  java
  • python中的迭代器

    可迭代对象

    • 可通过for…in 进行遍历的数据类型包括 list,tuple, dict, set, str;以及生成器generator,及带yield的生成器函数
    • 这些可直接作用于for循环的对象统称为可迭代对象:Iterable
    from collections import Iterable
    >>>isinstance('abc',Iterable)
    >>>True
    >>>isinstance((x for x in range(10)),Iterable)
    >>>True
    >>>isinstance(100,Iterable)
    >>>False
    

    迭代器

    • Iterator,无限大数据流,内部定义__next__( )方法,返回下一个值的对象
    • 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator

    返回迭代器对象

    mylist=[1,2,3,4,5]
    it=iter(mylist)
    >>>next(it)
    >>>1
    >>>next(it)
    >>>2
    >>>it.__next__()
    >>>3
    >>>it.__next__()
    >>>4
    >>>next(it)
    >>>5
    

    两种方式等效,访问下一个元素

    1. 通过 it.next()
    2. next(it)

    创建一个迭代器

    class Fibs:
        def __init__(self):
            self.a=0
            self.b=1
        def __next__(self):
            self.a,self.b=self.b,self.a+self.b
            return self.a
        def __iter__(self):
            return self
            
    
    • 实现__iter__和__next__方法可自定义迭代器类
    • 实现__next__方法,可访问迭代器中的元素

    生成器VS迭代器

    • 生成器:一种特殊的迭代器,只能被遍历一次,生成器表达式,生成器函数(yield)创建生成器
    • 迭代器:无限大数据流(容器),可通过实现__iter__( )和__next__( )方法,自定义迭代器类,注意与Iterable可迭代对象区别
  • 相关阅读:
    重排序
    线程的生命周期状态
    并发的有序性
    并发的可见性
    并发的原子性
    Java内存模型
    缓存一致性协议MESI
    lsof
    nmap
    elastcisearch简介
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11567633.html
Copyright © 2011-2022 走看看