能被for循环遍历的对象,被称为:可迭代对象(iterable)


PS:
使用region可以折叠代码
如:
用region和endregion包含

可迭代对象(iterable)能调用到__iter__方法
可以使用hasattr()进行判断
hasattr()是Python的内置函数,用来检查一个对象是否拥有某个属性或方法


调用__iter__方法会得到:迭代器(iterator)
__iter__是一个魔法方法,当调用内置iter函数时,__iter__会自动调用

如何判断一个对象是否为可迭代对象?
如果iter(obj)能得到一个迭代器(iterator),那obj就是可迭代对象

迭代器(iterator)拥有__next__方法,每次调用都会根据当前的状态,返回下一个元素
迭代器.__next__()等价于next(迭代器)
当所有元素全部取出后,若继续调用__next__方法,Python会抛出StopIteration异常

for循环背后的工作逻辑


迭代器(iterator)也拥有__iter__方法,并且其返回值是迭代器自身
这么设计的原因如下:让 for 循环也能遍历迭代器(即:为了让 iter(迭代器)不出错,这个要看for循环背后工作逻辑)
迭代器协议:
一个对象只要实现了__iter__()和__next__()这两个方法,它就是一个迭代器