python 可迭代对象,迭代器,生成器

1.可迭代对象:

实现了__iter__()方法的对象就是一个可迭代对象。

验证一个对象是否是可迭代对象的方法:

from collections import Iterable
from collections import Iterator

a=[1,2,3,4,5]
isinstance(a,Iterable)
True  #是可迭代对象
isinstance(a,Iterator)
False #不是迭代器

如下是Iterable的源码:

class Iterable(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __iter__(self):
        while False:
            yield None

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Iterable:
            if any("__iter__" in B.__dict__ for B in C.__mro__):
                return True
        return NotImplemented

2.迭代器:

实现了__iter__()方法和__next()__方法的对象就是一个可迭代对象。

看collections中Iterator的源码:

class Iterator(Iterable):   #继承Iterable

    __slots__ = ()

    @abstractmethod
    def __next__(self):    #多了一个__next__()
        'Return the next item from the iterator. When exhausted, raise StopIteration'
        raise StopIteration

    def __iter__(self):
        return self

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Iterator:
            if (any("__next__" in B.__dict__ for B in C.__mro__) and
                any("__iter__" in B.__dict__ for B in C.__mro__)):
                return True
        return NotImplemented

3.生成器:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值