更新時(shí)間:2017年12月07日14時(shí)15分 來(lái)源:傳智播客 瀏覽次數(shù):
一、迭代器
迭代器只能向前訪問(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ù)稱為生成器(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))
北京校區(qū)