1.迭代:

如果中途有任何停顿,都不能算是迭代。

#1)    非迭代例子
loop = 0
while loop < 3:
    print("Hello world!")
    loop += 1
#2)     迭代例子
loop = 0
while loop < 3:
    print(loop)
loop += 1

2.容器:

可迭代对象赋予了容器这种能力。

3.可迭代对象(Iterable):

__iter__()就行;

  可迭代对象并不是指某种具体的数据类型,它是指存储了元素的一个容器对象。

__iter__()获得一个可迭代器,第二件事是循环调用__next__()。

  常见的可迭代对象包括:a)    集合数据类型,如list、tuple、dict、set、str等;b)生成器(generator)

4.迭代器(Iterator):

  迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个迭代器对象必须是定义了__iter__()方法和next()方法的对象。

for i in 可迭代器or可迭代对象:... 这个最后有个 异常来检验是否结束迭代;

>>> a = [1,2,3]
>>> b = iter(a)
>>> b
<list_iterator object at 0x09CF4210>
>>> b.__next__()
1
>>> b.__next__()
2
>>> b.__next__()
3
>>> b.__next__()
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    b.__next__()
StopIteration

 

原因如下:

class B(object):
    def __next__(self):
        raise StopIteration

class A(object):
    def __iter__(self):
        pass
        return B()#return B()
#A这个类实现了一个__iter__函数,返回的是B()的实例对象,其中B里面实现了__next__这个函数。

from collections.abc import *

a = A()
b = B()
print(isinstance(a, Iterable))#因为有__iter__ 所以其是一个可迭代对象Iterable
print(isinstance(a, Iterator))#因为没有__next__  所以不是一个迭代器Iterator

print(isinstance(b, Iterable))#因为没有__iter__,所以不是一个可迭代对象
print(isinstance(b, Iterator))#因为没有__iter__ ,所以不是一个迭代器
#output
True
False
False
False
>>>

这样B就行了:

isinstance(obj, Iterable)
Iterable
__iter__()
#output:
True
False
True
True

 

raise:

try:
    a = input("输入一个数:")
    #判断用户输入的是否为数字
    if(not a.isdigit()):
        raise ValueError("a 必须是数字")
except ValueError as e:
    print("引发异常:",repr(e)) #repr() 函数将对象转化为供解释器读取的形式。

5.__getitem__(),让对象实现可迭代功能:

#任何Python序列都可迭代的原因是,他们都实现了__getitem__方法。其实,标准的序列也都实现了 __iter__方法。
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

 

参考链接:

https://www.jianshu.com/p/1b0686bc166d

collections.abc 可以参考这里:https://docs.python.org/zh-cn/3/library/collections.abc.html

raise: http://c.biancheng.net/view/2360.html

repr: https://www.runoob.com/python/python-func-repr.html