码迷,mamicode.com
首页 > 其他好文 > 详细

可迭代对象、迭代器、生成器之间的关系

时间:2018-02-28 20:14:38      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:[]   return   abs   iterable   rac   foo   列表   __iter__   str   

from collections import Iterable,Iterator
from abc import ABCMeta, abstractmethod
assert 1 in [1,2,3]
# assert 4 in [1,2,3]
# assert len([1,2]) >=5,‘列表元素个数小于5‘

d = {1: foo, 2: bar, 3: qux}
assert 1 in d
# assert ‘foo‘ in d

print(isinstance(iter([]),Iterable))#True
print(isinstance(iter([]),Iterator))#True
print(isinstance([],Iterable))#True

for i in iter([1,2,3]):
    print(111,i,type(i),type(iter([1,2,3])))
    ‘‘‘
    111 1 <class ‘int‘> <class ‘list_iterator‘>
    111 2 <class ‘int‘> <class ‘list_iterator‘>
    111 3 <class ‘int‘> <class ‘list_iterator‘>
    ‘‘‘

class Fib:
    def __init__(self):
        self.prev = 0
        self.curr = 1

    def __iter__(self):
        return self

    def __next__(self):
        value = self.curr
        self.curr += self.prev
        self.prev = value
        return value

f = Fib()

print(isinstance(f,Iterable))#True
print(isinstance(f,Iterator))#True

结论:

可迭代对象:可以进行for循环都是可迭代对象,原因是其内部实现了一个__iter__方法

迭代器:能够进行next(迭代器对象),都是迭代器对象,其内部实现了__iter__和__next__方法

生成器:元祖推导式和函数里使用yield的函数都是生成器

生成器属于迭代器
迭代器属于可迭代对象

  

可迭代对象、迭代器、生成器之间的关系

标签:[]   return   abs   iterable   rac   foo   列表   __iter__   str   

原文地址:https://www.cnblogs.com/ldq1996/p/8485440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!