迭代器
迭代: 能通過for迴圈遍歷物件的每乙個元素的過程
python的for語法功能非常強大 可以遍歷任何可迭代的物件
在python中,list/tuple/string/dict/bytes都是可以迭代的資料型別
迭代器是什麼?
迭代器是一種可以被遍歷的物件,並且能作用於next()函式。迭代器物件從集合的
第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往後遍歷不能回
溯,不像列表,你隨時可以取後的的資料,也可以返回頭取前面的資料。
from collections import iterator,iterable
print
(isinstance
(list()
,iterable)
)# true list 是可迭代物件
print
(isinstance
(list()
,iterator)
)# false list 不是迭代器
# iter next
l =[1,
2,3,
4]# 如何把列表變成迭代器 用iter
it =
iter
(l)print
(it)
print
(next
(it)
)print
(next
(it)
)print
(next
(it)
)print
(next
(it)
,'-'
)for i in it:
print
(i)
生成器
有時候 序列或集合內的元素的個數非常巨大 如果全製造出來 並放入記憶體 對計算機的壓力是非常大的
生成器如何讀取大檔案
需要到哪就計算到哪用迴圈的過程,不必計算出完整的,節省記憶體
一邊迴圈一邊計算就是python中的生成器 generator
# 我們學過列表推導式,把 換() 就是生成器了
g =(i for i in
range(10
))print
(g)print
(next
(g))
print
(next
(g))
print
(next
(g))
print
(next
(g))
print
(next
(g))
for i in g:
print
(i)# 0-9
# 如何用其他方式生成生成器,可以用關鍵字yield 函式的方式,
# 斐波拉契序列寫法?關鍵是 a,b = b,a+b
# 0 1 2 3 5 8 第一位數加第二數的和等於第三位數
deffibonacci()
:print
('--func start--'
) a,b =0,
1for i in
range(5
):# print(b)
print
('--1--'
)yield b # 用yield 就不是普通函式 而是生成器
print
('--2--'
) a,b = b,a+b
print
('--3--'
)print
('--func end--'
)g = fibonacci(
)print
(next
(g))
print
(next
(g))
print
(next
(g))
print
(next
(g))
print
(next
(g))
print
(next
(g))
# stopiteration 超出取值範圍反停止迭代
總結上程式:在呼叫生成器時每次遇到 yield時會暫停 會停在yield處
並用儲存當前資訊,然後返回yield值 當再次呼叫next時會在yield下面一行
繼續執行
如果讀取大檔案
生成器如何讀取大檔案
檔案300 g 檔案比較特殊 一行分隔符
def
readlines
(f,newline)
:# f 是檔案控制代碼 newline 就是分隔符
buf =
""while
true
:while newline in buf:
# index 2
pos = buf.index(newline)
yield buf[
:pos]
buf = buf[pos +
len(newline)
:]
chunk = f.read(
4096*10
)# 讀到檔案末尾
ifnot chunk:
yield buf
break
buf += chunk # 內容拼接
# 2+3
'abc123456'
with
open
('demo.txt'
)as f:
for line in readlines(f,"")
:print
(line)
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...