迭代器:具有迭代物件的容器,乙個可以記住遍歷的位置的物件。
生成器:使用了yield的函式被稱為生成器(generator)
字串,元組,列表都可以建立迭代器
結果:a =[1
,2,3
]iteration =
iter
(a)#建立迭代器
(next
(iteration)
)#開始輸出迭代器的下乙個元素
(next
(iteration)
(next
(iteration)
)
我們再試試多出列表元素的next函式1
23
結果:a =[1
,2,3
]iteration =
iter
(a)#建立迭代器
(next
(iteration)
)#開始輸出迭代器的下乙個元素
(next
(iteration)
(next
(iteration)
(next
(iteration)
)
發現報錯:stopiteration,我們相信可以用什麼方法解決報錯?123
traceback (most recent call last)
: file "c:/users/魑魅魍魎/desktop/飛機大戰/main.py"
, line 6,in
(next
(iteration)
)stopiteration
那就是異常處理
例子:
結果:try
: a =[1
,2,3
] iteration =
iter
(a)#建立迭代器
(next
(iteration)
)#開始輸出迭代器的下乙個元素
(next
(iteration)
(next
(iteration)
(next
(iteration)
)except stopiteration:
pass
我們還可以使用迭代器模擬1
23
for i in iteration
迴圈
迭代器和可迭代物件從某種層面說是乙個東西,只是迭代器(**iter(可迭代物件)**後)可以用a =[1
,2,3
,4,5
,6,7
,8,9
]a =
iter
(a)try
:while
true
(next
(a))
except stopiteration:
pass
next
實現一步一步的遍歷內容.而可以使用next()的方法就是乙個迭代器
本質上還是迭代器的一種
特點:
結果:def
func()
("**********1**********"
)yield
111111111111
("**********2**********"
)yield
222222222222
("**********3**********"
)yield
333333333333
("**********4**********"
)# 這就是類似於函式邏輯
a =func(
)#必須有這一步,類似例項化
(next
(a))
如果執行兩次呢?==
====
====1==
====
====
111111111111
結果:(next
(a))
(next
(a))
這就是特點2,顯式的暫停(yield)和恢復(next)==
====
====1==
====
====
111111111111
====
*****=2
====
====
==222222222222
暫停在yield處
那麼何為隱式的迭代協議呢???例:
結果:def
func()
("**********1**********"
)yield
111111111111
("**********2**********"
)yield
222222222222
("**********3**********"
)yield
333333333333
("**********4**********"
)a = func(
)# 必須有這一步,類似例項化
(next
(a))
(next
(a))
(next
(a))
(next
(a))
這就是特點三,依然像迭代器一樣順序執行,當超出範圍沒有暫停就報錯==
====
====1==
====
====
111111111111
====
*****=2
====
====
==222222222222
====
*****=3
====
====
==333333333333
====
*****=4
====
====
==traceback (most recent call last)
: file "c:/users/魑魅魍魎/desktop/飛機大戰/main.py"
, line 15,in
(next
(a))
stopiteration
生成器可以省記憶體,需要多少就執行多少,而不會像列表一樣,需要提前寫好一大串!
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...
迭代器 生成器
迭代器 iter 可迭代物件 下乙個元素的值 next 可迭代物件 類中實現 iter 方法 提供迭代器 實現迭代器 import time class mylistiter object 迭代器類 def init self,data self.data data self.index 0 def...