迭代器

AffettoIris 2023-2-19 2,727 2/19

迭代器

好像迭代器能做的,for x in sequence:也能做,尤其是

it = iter([1, 2, 3])
for x in it:
    print(x)

我干嘛不直接

for x in [1, 2, 3]:
    print(x)

答:假如给你一个列表获取其中的元素,你一定会用for循环进行遍历,然后获取你想要的元素。但是现在是一个数据爆炸的时代,假如数据特别大,那么你的计算机读取数据就要耗费大量的时间和计算机内存消耗,这时我们就会想到用python的迭代器了。迭代器的好处:你想啊,for x in [1, 2, 3]是把[1, 2, 3]罗列在内存中,等待依次被读取,迭代器不是,迭代器每次都只返回下一个数据元素,从而把所有的数据全部读取完毕。而且迭代器是可以记住数据访问的位置,从而可以快速拿到下一条元素,而且不需要把所有的列表元素给读取进来,节省了内存空间。

其次迭代器可以迭代类的实例化,我们开发中常用到类,比如把每个用户定义为User类的对象,这个时候想遍历用户的爱好,就可以用迭代器。例如:

class User:
    hobbies = ['sleep', 'eat', 'play ball']
    count = len(hobbies)   
    i = -1
    def __iter__(self):
        self.hobbies += ['test']
        return self
    def __next__(self):
        if self.i < self.count:
            self.i += 1
            return self.hobbies[self.i]
        else:
            raise StopIteration

u1 = User()
it = iter(u1) # 调用u1.__iter__(self),self取u1,可见只执行一次,就当用来初始化的吧。
try :
    print(next(it)) # sleep # 调用u1.__next__(self)
    print(next(it)) # eat
    print(next(it)) # play ball
    print(next(it)) # test
    print(next(it)) # raise StopIteration
except StopIteration:
    print('over')
- THE END -

AffettoIris

10月16日18:49

最后修改:2023年10月16日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论