迭代器是什麼?生成器是什麼?兩者有什麼區別?

2021-10-03 19:14:22 字數 830 閱讀 1733

首先,我們需要想理解容器什麼。這裡的容器指定並不是雲計算中的容器,實際上,我們可以認為,容器就是將多個元素在一起的單元,並且,是可以迭代的,可以遍歷容器內部的物件的。看到這裡,會不會覺得挺熟悉的?沒錯,列表,元組,字典這些都是容器。

理解完容器是什麼,再來看看什麼是迭代器。只要定義了__next__() (python3的操作)或next() (python2的操作)),他就是乙個迭代器。迭代器可以用於迭代操作,將我們容器中的每乙個物件迭代獲取。

迭代器可以看作使用for迴圈對容器進行遍歷。那迭代器最主要的優點又是什麼呢?

比如:我們定義乙個列表,是從1到10000的,顯然這麼大的資料量會占用我們一定的記憶體,而當我們僅需要對1到10000進行遍歷時,列表占用這麼大的記憶體實屬浪費。我們可以用迭代器的方法,對列表使用iter()的方法生成乙個迭代器,迭代器並沒有一次性把所有元素都載入到記憶體裡,而是以一種延遲計算的方式來返回元素(等到使用__next__時才返回)這樣,占用空間就會大大減小,這正是他的一大優點。

生成器可以理解為特殊的迭代器。但其相比與迭代器,占用的記憶體更少。他本質上是乙個函式,只不過函式的return改為了yield語句,正常的for迴圈語句,會不停的遍歷容器的物件,然後返回(如果有return的話),當我們用yield取而代之,我們便可以對函式進行掛起操作,也就是說,每當函式執行時遇到yield時,他會記住此時的乙個位置並掛起,等到使用__next__操作時,才由上一次掛起的位置繼續執行。

迭代器,在建立的時候已經生成,在需要的時候再去操作迭代器載入元素到記憶體中,而生成器,本質是乙個可以暫時掛起的函式,等到需要時再繼續執行去生成元素,這樣子,使得生成器比迭代器更省記憶體。

REST和RPC是什麼東東?兩者有什麼區別

1.1.1 rest與rpc概念 什麼是rest rest是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程式或設計就是 restful。rest規範把所有內容都視為資源,網路上一切皆資源。rest並沒有創造新的技術,元件或服務,只是使用web的現有特徵和能力。可以完全通過...

迭代器是什麼

在學習c stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個十分簡陋的vector類 view plain template class t class vector t begin void insert...

迭代器是什麼

分類 c c 2010 05 07 16 06 1877人閱讀收藏 舉報iterator vector list 演算法insert class 在學習c stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個...