【问题标题】:for loop in a sequence or in an iterator序列或迭代器中的 for 循环
【发布时间】:2021-11-02 19:05:24
【问题描述】:

我有 3 个对象 Item1Item2一个自定义迭代器。 Item2 与 Item1 相同,但它比 Item1 多实现了一个函数__iter__()__iter__() 将返回一个自定义迭代器。

class Item1():
    def __init__(self, stop):
        self.stop = stop

    def __len__(self):
        return self.stop - 1

    def __getitem__(self, index):

        if index < self.stop:
            return index + 1
        raise IndexError


class Item2():
    def __init__(self, stop):
        self.stop = stop

    def __len__(self):
        return self.stop - 1

    def __getitem__(self, index):

        if index < self.stop:
            return index + 1
        raise IndexError

    def __iter__(self):
        iterator = MyIterator(self.stop)
        return iterator


class MyIterator:
    def __init__(self, max_num):
        self.max_num = max_num
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.index += 1
        if self.index <= self.max_num:
            return self.index
        else:
            raise StopIteration

当我使用 for 循环迭代 Item1 和 Item2 时,将得到相同的结果。 但是,我想知道内存的使用会不会是一样的Item2有迭代器的优势吗?

Item1 = Item1(100000)
item2 = Item2(100000)

for item in item1:
    print(item)

for item in item2:
    print(item)

【问题讨论】:

    标签: python for-loop memory iterator sequence


    【解决方案1】:

    你可以通过tracemalloc()查看内存使用情况

    https://medium.com/survata-engineering-blog/monitoring-memory-usage-of-a-running-python-program-49f027e3d1ba

    您在我的机器上实现的内存使用情况:

    item1:当前内存使用量为0.000379MB;峰值为 0.000593MB

    item2:当前内存使用量为0.001218MB;峰值为 0.001478MB

    item2 需要更多内存

    ->这里有一篇关于区别What's the difference between __iter__ and __getitem__?的帖子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2016-06-20
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2010-09-11
      相关资源
      最近更新 更多