迭代器和生成器都能使用next進行迭代,而且好像都不怎么占用記憶體。
生成器比較好理解,是一邊迭代一邊生成資料。那迭代器物件為什么也不怎么占用記憶體呢?
比如我在對一個長度為1億的串列呼叫iter方法得到一個對應的迭代器物件后,我查看呼叫iter前后的記憶體發現這個迭代器并沒有占用什么記憶體,那么這個迭代器物件呼叫next方法時是在哪里取到的資料呢?
網上查了半天沒找到想要的答案。。。。。。
uj5u.com熱心網友回復:
資料可以存盤在硬碟,記憶體中,CPU快取不考慮記憶體占用的少,那就是從硬碟讀取的唄。
uj5u.com熱心網友回復:
你可以自己寫個類做測驗,擁有 __iter__ 方法的是可迭代物件,加上 __next__ 方法就是迭代器,其中 __next__ 方法的作用是對當前迭代物件進行操作,一般是記錄當前迭代物件和分析下一個迭代物件,實際上就是一個生成器
可以參照以下案例,下面的案例是轉的
#斐波那契數列
class Fabs():
def __init__(self,max):
self.max=max
self.n,self.a,self.b=0,0,1
#定義__iter__方法
def __iter__(self):
return self
#定義__next__方法
def __next__(self):
if self.n<self.max:
tmp=self.b
self.a,self.b=self.b,self.a+self.b
self.n+=1
return tmp
raise StopIteration
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/188165.html
上一篇:pycharm2020連接遠程服務器中找不到deployment解決方法
下一篇:關于正則運算式,求助各位大哥
