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

    Python之迭代器

       迭代器的作用:用来做迭代。(我擦,好似废话一般的存在!!!)可以不用for和while循环,遍历数据类型的元素,拿取元素也不需要索引。

       迭代是在描述一个重复的过程。那么问题来了,啥子东西是重复的哩。for and while。

       类似循环一样,将有序数据类型的数据,按索引值,顺序取来,来呀来呀来呀!

       但是呀,重点来了,but。有序数据类型可以用循环来有序的挨个的取出来,可以无序的也想出来,咋办。  

       所以说,亲:迭代器了解下,服务周到,安全可靠。

       迭代器功能的发挥场所:

          用是有前提的。Python解释器为可以被迭代的数据类型,都设了一个 __iter__ 方法。只有有iter方法的数据类型,才可以用。

          有__iter__ 方法的,就叫做可迭代对象。      

    d = {"a":2,"b":8,"l":4,}
    d.__iter__()    #只要有iter方法,就是可以迭代的。    d.__iter__() == iter(d)

          执行d.__iter__ ,是它赋予变量任何,比如H,这个H就是迭代器,亲。

          一旦有了H。就可以在H里用next方法。next,就是下一个嘛。他就可以是迭代器一个一个的出值,听着是不是有点便秘。哈哈哈哈哈。

          但是,next是有限的。你的数据类型里有多少元素,就可以next多少下,超出的话,会报一个超出范围的错。也可以说是一个结束信号的红字提示。

          迭代器提供了一种不依赖索引值取值的方式,这样就可以遍历那些没有索引值的可迭代对象,比如文件,字典,集合。

          

        迭代器,比数据类型要更节省内存。迭代器是每next一下,才出一个值。相比列表什么的,一下子将数据放入内存相比。相当省空间。所以呀。迭代器是惰性计算。

    凡事有利有弊:

      迭代器的缺点是:

        1.在知道要去某一位置的值时,迭代器要先迭代出之前的,才能拿到值。这点就不如列表。

        2.迭代器无法获取长度。无法知道被迭代的对象有多少元素。

        3.迭代器只能一次性的往后取值,无法取上一个值。

    用  from collections import Iterable,Iterator 的两个方法,可以查看可迭代对象和迭代器对象。

    from collections import Iterable,Iterator
    
    s='hello'
    l=[1,2,3]
    t=(1,2,3)
    d={'a':1}
    set1={1,2,3,4}
    f=open('a.txt')
    
    #都是可迭代的
    # s.__iter__()
    # l.__iter__()
    # t.__iter__()
    # d.__iter__()
    # set1.__iter__()
    # f.__iter__()
    # print(isinstance(s,Iterable))
    # print(isinstance(l,Iterable))
    # print(isinstance(t,Iterable))
    # print(isinstance(d,Iterable))
    # print(isinstance(set1,Iterable))
    # print(isinstance(f,Iterable))
    
    #查看是否是迭代器
    print(isinstance(s,Iterator))
    print(isinstance(l,Iterator))
    print(isinstance(t,Iterator))
    print(isinstance(d,Iterator))
    print(isinstance(set1,Iterator))
    print(isinstance(f,Iterator))

      Iterable 是否可迭代   返回布尔值。

      Iterator 是否是迭代器,返回布尔值。

  • 相关阅读:
    leetcode-654-最大二叉树
    leetcode-46-全排列
    图片懒加载?
    HTTP常见的状态码?
    线程与进程的区别?
    网页从输入网址到渲染完成经历了哪些过程?
    网页前端性能优化的方式有哪些?
    常见的浏览器内核有哪些?
    汇编语言--cpu的工作原理(寄存器)--手稿
    对于 vue3.0 特性你有什么了解的吗?
  • 原文地址:https://www.cnblogs.com/george92/p/9040165.html
Copyright © 2011-2022 走看看