python--迭代器

天子骄龙 / 2024-09-25 / 原文

在Python中数据类型list、tuple、str、dict、set、f=open()、range()、enumerate均可通过for循环进行遍历,通过for循环的这种遍历就称为迭代

以上几种类型都是可迭代对象(Iterable) 

协议:

含有__iter__函数就是可迭代的

 含有__iter__函数和__next__函数就是迭代器

from collections.abc import Iterable
from collections.abc import Iterator

class A:
    def __iter__(self):pass
    #def __next__(self):pass

a=A()
print(isinstance(a,Iterable))  #判断a是不是迭代器
print(isinstance(a,Iterator))  #判断a是否可迭代

 

 

 

print(dir([]))   #返回列表的内置方法
print("__iter__" in dir([]))  #__iter__函数是否在列表的内置函数中
#返回True  说明是可迭代的,能用for进行遍历的

ret=[].__iter__()   #返回迭代器
print(ret)      #<list_iterator object at 0x00000151E2A48288>
print(dir(ret))   #返回迭代器内置函数
#['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']

 

 

list1=[10,20,30]
print(list1.__iter__().__length_hint__())  #返回迭代器中元素的个数
#3

 

list1=[10,40,30,20,50,90]
print(list1.__iter__().__next__())  #返回迭代器中的下一个元素