python中的可迭代对象

来源:互联网 发布:vs2015 python 编辑:程序博客网 时间:2024/06/06 20:08

迭代是访问集合元素的式。迭代器是个可以记住遍历的位置的对象。迭代器对象从集合的第个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1.   可迭代对象

我们已经知道可以对listtuplestr等类型的数据使for...in...的循环语法从

其中依次拿到数据进使,我们把这样的过程称为遍历,也叫迭代

但是,是否所有的数据类型都可以放到for...in...的语句中,然后让for...in...

每次从中取出条数据供我们使,即供我们迭代吗?

>>>    for    i    in    100:

...                    print(i) ...

Traceback    (most    recent    call    last):

File    "<stdin>",    line    1,    in    <module> TypeError:    'int'    object    is    not    iterable

>>> 

#    int整型不是iterable,即int整型不是可以迭代的

#   我们⾃定义⼀个容器MyList⽤来存放数据,可以通add⽅法向其中添加数据

>>>    class    MyList(object):

...                    def   __init__(self):

...                            self.container    =    []                

                      def   add(self,    item):

...                           self.container.append(item)

>>>    mylist    =    MyList()

>>>    mylist.add(1)

>>>    mylist.add(2)

>>>    mylist.add(3)

>>>    for    num    in    mylist:

...                    print(num) ...

Traceback    (most    recent    call    last):

File    "<stdin>",    line    1,    in    <module>

TypeError:    'MyList'    object    is    not    iterable

>>> 

#    MyList容器的对象也是不能迭代的

我们定义了个容器类型MyList,在将⼀个存放了多个数据的MyList对象

放到for...in...的语句中,发现for...in...并不能从中依次取出⼀条数据返回

们,也就说我们随便封装了个可以存放多条数据的类型却并不能被迭代使

我们把可以通过for...in...这类语句迭代读取⼀条数据供我使⽤的象称之可迭代对象(Iterable

两种方法:

1.可迭代对象.__iter__()

2.iter(可迭代对象)

2.   如何判断⼀个象是否可以迭代

可以使   isinstance()   判断⼀个对象是否是    Iterable   对象:

In    [50]:    from    collections   import    Iterable

In    [51]:    isinstance([],    Iterable) Out[51]:   True

In    [52]:    isinstance({},    Iterable)

Out[52]:    True

In    [53]:    isinstance('abc',    Iterable)

Out[53]:    True

In    [54]:    isinstance(mylist,    Iterable)

Out[54]:    False

In    [55]:    isinstance(100,    Iterable)

Out[55]:   False

3.   可迭代对象的本质

我们分析对可迭代对象进迭代使的过程,发现每迭代次(即在for...in...中每循环⼀次)都会返回象中的下⼀条数据,⼀直向后取数据直到迭代了所有数据后束。那么,在程中就应该有⼀个“⼈”去记录每次访问到了第条数据,以便每次迭代都可以返回下条数据。我们把这个能帮助

我们进数据迭代的“⼈”称为迭代器(Iterator)

可迭代对象的本质就是可以向我们提供个这样的中间“⼈”即迭代器帮助我们对其进迭代遍历使

可迭代对象通过    __iter__   ⽅法向我提供⼀个迭代器,我在迭代⼀个可迭代象的候,实际上就是先该对象提供的⼀个迭代器,然后通过这个迭代器来依次象中的每⼀个数据。那么也就是,⼀个具备   __iter__   ⽅法的象,就是⼀个可迭代象。

>>>    class    MyList(object):

...                    def   __init__(self):

...                             self.container    =    []                

                        def   add(self,    item):

...                              self.container.append(item)                   

                        def   __iter__(self):

...                               """返回⼀个迭代器"""

...                                #    我们暂时忽略如何构造⼀个迭代器对象

...                                  pass

>>>   mylist    =    MyList()

>>>    from    collections    import    Iterable

>>>   isinstance(mylist,    Iterable)

True

>>> 

#   这回测试发现添加了__iter__⽅法的mylist对象已经是⼀个可迭代象了

原创粉丝点击