一般使用for迴圈的順序:
先建立乙個迭代器:列表,並且列表內已存在資料
接著使用 for迴圈遍歷列表
但這樣存在乙個問題,假如列表內的資料量很大,這樣還未使用for迴圈便已經被列表占用很大的資源
這時我們就可以將這個迭代器做成乙個生成資料的迭代器,而非只是占用大資源的資料,從而減少資源占用
python2裡有range和xrange,而前者和後者區別是,range就像是那個占用大資源的資料,xrange則是生產資料的迭代器
python3並沒有xrange,它的range就是乙個生產資料的迭代器
同理,list(),和tuple(),之間並非簡單的轉換,而是建立了乙個空列表/元組,然後不斷將原列表/元組的資料新增到空列表/元組中,也就是生產資料的迭代器
例子中 for迴圈遍歷的nums是已經存在需要遍歷的所有資料
#未使用迭代器的斐波那契數列例子
nums =list()
a =0
b = 1i =0
while i < 10:
a, b = b, a+b
i += 1
for num in
nums:
print(num)
例子中 for迴圈遍歷的nums需要用幾個到才去生產幾個(即每遍歷獲取乙個num,才生產乙個資料)
# 使用了迭代器的斐波那契數列的例子#for 迴圈的物件並不是個內容,而是生成內容的方法,這樣做可以節省資源
class
fibonacci(object):
def__init__
(self, all_num):
self.all_num =all_num
self.current_num =0
self.a =0
self.b = 1
def__iter__
(self):
return
self
def__next__
(self):
if self.current_num ret =self.a
self.a, self.b = self.b, self.a+self.b
self.current_num += 1
return
ret
else
:
raise
stopiteration
fibo = fibonacci(10)
for num in
fibo:
print(num)
memcpy 的使用以及迭代器的使用
memcpy 拷貝記憶體內容 相關函式 bcopy memccpy memmove strcpy strncpy 表頭檔案 include 定義函式 void memcpy void dest,const void src,size t n 函式說明 memcpy 用來拷貝src所指的記憶體內容前n...
集合中Iterator迭代器的使用以及實現原理。
collection集合元素通用的獲取方式,在取之前先要判斷集合中有沒有元素,如果有就把這個元素取出來,繼續在判斷,如果還有就再取出來,一直把集合中的元素全取出來,這種去出方式叫做迭代。迭代器的作用就是獲取集合中的元素的方式。介面iterator有兩個抽象的方法 演示 如下 如上圖所示當例項化ite...
Jrtp的簡單應用,以及記憶體洩漏的問題。
工程發生了記憶體洩漏,排查許久發現是jrtp傳輸的問題。在此備份一下,以共勉。接收端 段 int main void while sess.gotonextsourcewithdata sess.enddataaccess ifndef rtp support thread status sess....