全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

python基礎(chǔ):迭代器與生成器

更新時(shí)間:2017-12-07 來(lái)源:黑馬程序員 瀏覽量:

一、迭代器

迭代器只能向前訪問(wèn),不能后退。字典,列表,元組,字符串,range都是可以迭代的對(duì)象。

1、創(chuàng)建迭代器

`dict={1:3,2:4,3:5,4:6}

key = iter(dict)

print(key)

print(next(key))

print(next(key))

values = iter(dict.values())

print(values)

print(next(values))

print(next(values))

list= [1, 2, 3, 4, 5]

list2 = iter(list)

print(list2)

print(next(list2))

print(next(list2))

print(next(list2))

print(next(list2))

ranges = iter(range(1, 10))

print(ranges)

print(next(ranges))

print(next(ranges))

print(next(ranges))`

運(yùn)行結(jié)果:

1

2

3

4

1

2

3

4

1

2

3

2、讀取迭代器:

#for遍歷

list= [1, 2, 3, 4, 5]

for i in iter(list):

print(i)

next()遍歷:

while True:

try:

print (next(it))

except StopIteration:

sys.exit()

二、生成器

使用了yield的函數(shù)稱(chēng)為生成器(generater).對(duì)于非常巨大的數(shù)了列表非常有用,一次讀取一個(gè)元素,節(jié)省內(nèi)存資源。

生成器用于不知道會(huì)生成多大數(shù)據(jù)的場(chǎng)景,每生成一個(gè)數(shù)據(jù)返回一次

跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡(jiǎn)單點(diǎn)理解生成器就是迭代器。

在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回yield的值。并在下一次執(zhí)行 next()方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。

下面代碼正常是死循環(huán),但是使用yield以后,只在用next()方法,才會(huì)運(yùn)行一次。

def gena(i=2):

while True:

i = i * 2 - 1

yield i

運(yùn)行:

l = gena(2)

print(l)

print(next(l))

print(next(l))

本文版權(quán)歸黑馬程序員人工智能+Python學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!


作者:黑馬程序員人工智能+Python培訓(xùn)學(xué)院


首發(fā):http://python.itheima.com/

分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!