第二篇
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...