python--迭代器和迭代器对象的区别和联系

可迭代对象(iterable)


​ 在之前学过的容器中,许多容器都是可迭代对象,可以直接用于for…in…循环的而对象都是可迭代对象,比如:list,tuple,dict,set,str等等。

可迭代对象满足条件:实现了__iter__方法

可迭代对象并不是一种具体的数据类型,比如list是可迭代对象,dict也是可迭代对象。

如何判断一个对象是否是可迭代对象? 使用isinstance()函数

from collections import Iterable 
isinstance("123",Iterable) #字符串是不是可迭代对象 返回True
isinstance(1,Iterable) #数字是不是可迭代对象  返回False
   
   
   
   
  • 1
  • 2
  • 3
  • 4

迭代器(iterator)


​ 迭代器是一种带有状态的对象,能够调用next()获取容器的下一个值,但如果调用了next方法,容器没有值可以返回,则会抛出一个StopIteration异常。

迭代器满足的条件:实现__iter__()方法和__next()__方法

迭代器的特点:

​ 1. 获取较多的值得时候(比如一百万个数据),比起使用列表等容器存储,更加省内存。因为迭代器有next方法,不会一次性把所有数据生成,而是一个接一个的计算,当你想要下一个值得时候才给你返回。

两者的关联


结论:

  1. 可迭代对象是包含迭代器的(迭代器一定是可迭代对象,反之却不一定)
  2. 如果一个对象定义了__iter()__方法,那它就是可迭代对象。
  3. 如果一个对象定义了__iter()__方法和__next()__方法,那它就是迭代器。(因为迭代器是可迭代对象,所以一定有__iter()__)

操作:

  • 获取迭代器

对于python内置的可迭代对象,可以使用函数iter()获取相应的迭代器。(注意这个iter()是内置函数,与__iter()__不同)

实际上,iter()和__iter()__联系很紧密,iter()是直接调用了对象的__iter()__方法,并且把这个方法的返回值作为自己的返回值。

在for..in…循环中,比如 for i in list,会先调用iter(list)获取可迭代对象list的迭代器,再每次循环调用迭代器的next()方法获取值。

  • 反向迭代

  • 1.使用内置函数reversed()

    a = [1,2,3,4,5]
    for i in reversed(a):
    print(i)
    
    #输出结果为:
    
    
    #5
    
    
    #4
    
    
    #3
    
    
    #2
    
    
    #1
    
       
       
       
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    注意:

    1.反向迭代只适用于对象的大小预先确定了,或者对象实现了__reversed__()的特殊方法的时候才有效。

    2.如果以上两点都不符合,那必须要把对象转为一个列表才可以。

    (如果转为列表,如果可迭代对象的元素很多的话,会很消耗内存!)

    你可能感兴趣的:(大数据)