python高階 小白也能看懂 生成器與迭代器

2021-10-02 23:18:42 字數 2938 閱讀 1533

第二篇

2 什麼是生成器與迭代器

3 參考

先給出生成器與迭代器的例子,然後詳細講解需要理解的知識。

# 生成器

a =(i+

1for i in

range(10

))# 列表推導式,不是生成器

b =[i+

1for i in

range(10

)]# 生成器

defgenerator

(n):

z =1while zz +=

1yield z

return

"done"

c = generator(5)

# 如果不信可以使用print驗證

print

(a,b,c,sep=

"\n"

)

輸出結果

at 0x000001d1b1e48570>

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 迭代器

class

fib(

object):

def__init__

(self)

: self.a, self.b =0,

1# 返回迭代器物件本身

def__iter__

(self)

:return self

# 返回容器下乙個元素

def__next__

(self)

: self.a, self.b = self.b, self.a + self.b

return self.a

d = fib(

)# 判斷d是否為迭代器

isinstance

(d, iterator)

輸出結果

true
在 python 中,迭代器是指遵循迭代器協議(iterator protocol)的物件。

迭代器協議:任意物件只要定義了__iter__方法和__next__方法就是迭代器,就像上面例子給出的一樣。

迭代(iteration):當我們用乙個迴圈(比如 for 迴圈)來遍歷容器(比如列表,元組)中的元素時,這種遍歷的過程就叫迭代。

可迭代物件(iterable):直觀上可以用for迴圈遍歷的物件就是可迭代物件。 嚴格地定義說,python中任意的物件,只要它定義了可以返回⼀個迭代器的__iter__⽅法,或者定義了可以⽀持下標索引的__getitem__⽅法,那麼它就是⼀個可迭代物件。

2.1 迭代器與可迭代物件的區別

相同點:都可以使用for迴圈取出元素。

不同點:迭代器一定是可迭代物件,但可迭代物件不一定是迭代器。迭代器可以使用python內建的next方法乙個乙個取出元素,而可迭代物件不行。(從上面的定義也可以看出,因為可迭代物件沒有實現__next__方法)

iterator =

(i+1

for i in

range(5

))# 迭代器

iterable =

[i+1

for i in

range(5

)]# 可迭代物件

# 判斷itrable為可迭代物件

from collections import iterable

isinstance

(iterator, iterable)

# true

isinstance

(iterable, iterable)

# true

hasattr

(iterable,

'__iter__'

)# true

hasattr

(iterable,

'__getitem__'

# true

# 判斷iterator是否為迭代器

from collections import iterator

isinstance

(iterator, iterator)

# true

isinstance

(iterable, iterator)

# false

# iterator可以使用next方法

next

(iterator)

# 1# iterable不能使用next方法

next

(iterable)

# 'list' object is not an iterator

2.2 為什麼使用迭代器

與列表不同,迭代器不會把元素一次性載入到記憶體,而是以延遲方式載入。如列表中含有一千萬個整數,需要佔超過400m的記憶體,而迭代器只需要幾十個位元組的空間。因為它並沒有把所有元素裝載到記憶體中,而是等到呼叫 next 方法時候才返回該元素。這樣就不會消耗大量資源。(在使用for迴圈迭代的過程中,本質上是呼叫迭代器的next方法取出元素)

2.3 生成器——一種特殊的迭代器

生成器(generator)也是一種迭代器,它有和迭代器一樣的特性,唯一的區別在於生成器的構造方式更加簡潔。它通常採用yield將函式構造生成器或者使用生成器表示式()構造生成器。具體如何構造可以參考1.1 生成器的例子

極客學院——生成器

極客學院——迭代器

生成器與迭代器

小白也能看懂的XML簡介

目錄 一.xml簡介 二 xml用途 三 xml結構 四 xml語法 五 xml元素 六 xml屬性 七 總結 1.xml指可擴充套件標記語言,很類似html。xml被設計為傳輸和儲存資料,其焦點是資料的內容 html被設計用來顯示資料,其焦點是資料的外觀。2.xml的設計宗旨是傳輸資料,而非顯示資...

小白也能看懂的Cookie跟Session的區別

首先為了能充分理解為什麼引入cookie和cookie是什麼,先看了例子。不然官網上定義的概念不太容易看懂。eg 我今天想找老王吃放,打 給老王 例子看完了,在看看一些官網上一些專業術語的定義。會話 由一組請求和響應組成 理解為上面例子中的 對話 是圍繞著一件相關事情 吃飯 所進行的請求和響應。這些...

小白也能看懂的css基礎(一)

2 選擇器 3 常用的屬性 3.4 背景background 3.5 標籤顯示模式 display 一般少用,不推薦 backgroung color blue 在head標籤內放置,樣式不多時使用 新建檔案寫css樣式,在head內寫link引入html。標籤選擇器 標籤名 id選擇器 id名 i...