1. 程式人生 > >python叠代器以及生成器

python叠代器以及生成器

超出 字典 raise 必須 cep ext else 輸出 def

叠代器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叠代器以及生成器