for 在序列或迭代器中循环
for loop in a sequence or in an iterator
我有 3 个对象 Item1、Item2 和 一个自定义迭代器。 Item2 与 Item1 相同,但它比 Item1 多实现了一个功能 __iter__()
,__iter__()
将 return 自定义迭代器。
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 是否具有 iterator 的优势?
Item1 = Item1(100000)
item2 = Item2(100000)
for item in item1:
print(item)
for item in item2:
print(item)
您可以通过tracemalloc()查看内存使用情况
你的实现在我的机器上的内存使用情况:
item1:当前内存使用量为0.000379MB;峰值为 0.000593MB
item2:当前内存占用0.001218MB;峰值为 0.001478MB
item2 需要更多内存
->这里有一个post关于区别What's the difference between __iter__ and __getitem__?
我有 3 个对象 Item1、Item2 和 一个自定义迭代器。 Item2 与 Item1 相同,但它比 Item1 多实现了一个功能 __iter__()
,__iter__()
将 return 自定义迭代器。
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 是否具有 iterator 的优势?
Item1 = Item1(100000)
item2 = Item2(100000)
for item in item1:
print(item)
for item in item2:
print(item)
您可以通过tracemalloc()查看内存使用情况
你的实现在我的机器上的内存使用情况:
item1:当前内存使用量为0.000379MB;峰值为 0.000593MB
item2:当前内存占用0.001218MB;峰值为 0.001478MB
item2 需要更多内存
->这里有一个post关于区别What's the difference between __iter__ and __getitem__?