美文网首页
可迭代对象、迭代器

可迭代对象、迭代器

作者: 追梦若苦希望暖之 | 来源:发表于2021-01-26 16:08 被阅读0次

python 官方WIKI对于iterable与iterator的说明


image.png

1.可迭代(Iterable)对象

from collections.abc import Iterable

class MyIterator(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)
    
obj = MyIterator()
obj.add("aa")
obj.add('bb')
obj.add('cc')

print(isinstance(obj, Iterable))
image.png

obj 不是一个可迭代对象


from collections.abc import Iterable,Iterator

class MyIterator(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)
    
    def __iter__(self):
        pass
    
obj = MyIterator()
obj.add("aa")
obj.add('bb')
obj.add('cc')

print(isinstance(obj, Iterable))
print(isinstance(obj, Iterator))

for x in obj:
    print(x)

image.png
实现 __iter__方法后变为可迭代对象 但是obj 不是迭代器对象,并且
for循环报错iter()返回错误
from collections.abc import Iterable,Iterator

class MyIterator(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)
    
    def __iter__(self):
        return iter(self.names)
    
obj = MyIterator()
obj.add("aa")
obj.add('bb')
obj.add('cc')

print(isinstance(obj, Iterable))
print(isinstance(obj, Iterator))

for x in obj:
    print(x)
image.png

支持for迭代但是MyIterator依旧不是迭代器

总结:

实现了__iter__方法,并且__iter__方法返回迭代器对象 的类生成的对象即可迭代对象

2.迭代器(Iterator)

from collections.abc import Iterable,Iterator

class MyIterator(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)
    
    def __iter__(self):
        return iter(self.names)
    
obj = MyIterator()
obj.add("aa")
obj.add('bb')
obj.add('cc')

print(isinstance(obj, Iterable))
print(isinstance(obj, Iterator))

for x in obj:
    print(x)

next(obj)
image.png

一个迭代器(Iterator)对象不仅可以在for循环中使用,还可以通过内置函数next()函数进行调用。


from collections.abc import Iterable,Iterator

class MyIterator(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)
    
    def __iter__(self):
        return iter(self.names)
    
    def __next__(self):
        return next(iter(self.names))
    
obj = MyIterator()
obj.add("aa")
obj.add('bb')
obj.add('cc')

print(isinstance(obj, Iterable))
print(isinstance(obj, Iterator))

for x in obj:
    print(x)

next(obj)
image.png

总结:

实现了__iter__和__next__方法的类 生成的对象既迭代器

相关文章

  • 迭代器

    一、迭代器可迭代的(可迭代对象):可迭代对象都是可迭代的。如:str、list、dict、tuple、文件对象等等...

  • Python进阶 - 高性能计算之协程

    迭代器 可迭代对象 什么是可迭代对象 可迭代对象就是对象的类中实现了__iter__方法的对象。对于可迭代对象,可...

  • python中可迭代对象、迭代器、生成器的关系

    可迭代对象与迭代器 1)可迭代对象包含迭代器。 2)如果一个对象拥有__iter__方法,其是可迭代对象;如果一个...

  • 3-1 如何实现可迭代对象和迭代器对象(1)

    for循环的背后:确保in后边为可迭代对象 可迭代对象可以由内置函数iter得到一个迭代器对象注意:可迭代和迭代器...

  • Python中的可迭代对象和迭代器对象

    Python中的可迭代对象和迭代器对象是两种不同的东西,可迭代对象是Iterable,迭代器对象是Iterator...

  • 可迭代对象、迭代器、生成器

    可迭代对象 --> 迭代器 --> 生成器; 可迭代对象:实现了__iter__()方法的对象,该方法返回迭代对象...

  • 生成器与迭代器

    一:可迭代对象(Iterable) 1、什么叫可迭代对象? 2、python中那些是可迭代对象 二:迭代器(Ite...

  • 如何实现可迭代的对象和迭代器

    可以由可迭代对象得到一个迭代器 可迭代对象满足了迭代协议的一个接口 iter 或者 getitem迭代器对象只有一...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 迭代机制

    可迭代对象、迭代器、生成器、生成式区别 a. 可迭代对象: 一个对象能够被迭代的使用,这个对象就是可迭代对象 b....

网友评论

      本文标题:可迭代对象、迭代器

      本文链接:https://www.haomeiwen.com/subject/ylbgzktx.html