python叠代器以及生成器
叠代器iter():節省內存
Iter()叠代器
每一次輸出下一個值
>>> a=iter(range(10))
>>> a.next()
0
>>> a.next()
1
>>> a.next()
2
可以用捕獲異常來排除超出叠代範圍,或者判斷長度
>>> try:
... 1/0
... except:
... print "error occur"
...
error occur
如:
#encoding=utf-8
a=iter(range(10))
while 1:
try:
print a.next()
except:
print "error"
a=[1,2,3,4,5,6]變成字典{1:2,3:4,5:6}
算法1
#encoding=utf-8
a=[1,2,3,4,5,6]
d={}
for i in range(0,(len(a)-1),2):
print "i:",i
d[a[i]]=a[i+1]
print d
算法2
#encoding=utf-8
a=[1,2,3,4,5,6]
d={}
c=iter(a)
for i in range(len(a)/2):
k=c.next()
v=c.next()
d[k]=v
print d
自定義的叠代器
#encoding=utf-8
class MyRange(object):
def __init__(self,n):
self.idx=0
self.n=n
def __iter__(self):
return self
def next(self):
if self.idx<self.n:
val=self.idx
self.idx +=1
return val
else:
raise StopIteration()
myRange=MyRange(3)
print myRange.next()
print myRange.next()
print myRange.next()
print myRange.next()
結果:
生成器用圓括號聲明類似列表推導
也節省內存
用括號生成
b=(x*x for x in range(10))
用b.next()叠代列表中的元素
類似於叠代器
也可以在函數內用yield,yield必須自函數內用
def odd():
print ‘step 1‘
yield 1
print ‘step 2‘
yield 3
print ‘step 3‘
yield 5
o = odd()
print o.next()
print o.next()
print o.next()
print o.next()
生成器和叠代器區別
叠代器用iter(),
生成器可以用圓括號,或者用yield生成
python叠代器以及生成器