Python 迭代器和生成器

2021-10-23 02:20:28 字數 2875 閱讀 7073

迭代器

迭代: 能通過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 迭代器和生成器

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...