1.語法區(qū)別
(1)迭代器用[]生成满俗,如:[x*xforxinrange(3)]
(2)生成器用()生成粘捎,如:(x*xforxinrange(3))
2.生成結果區(qū)別
(1)迭代器生成一個list列表,可以多次被迭代取值
(2)生成器生成一個generator生成器,迭代取值只能用一次行疏,并且結果只能通過迭代的方式取值或者next()方法取值,一次迭代完之后結果就是一個[]空列表,如下:
mygenerator= (x*xforxinrange(3))
#----------
print mygenerator[0],mygenerator[2]#報錯TypeError: 'generator' object has no attribute '__getitem__'
#---------------
for a in mygenerator:
print"a=",a
for b in mygenerator:#這次獲取空
print"b=",b
#-----------
mygenerator2= [x*x for x in mygenerator]
print "mygenerator2=",mygenerator2
print type(mygenerator2)
mygenerator3 = [x*x for x in mygenerator]
print "mygenerator3=",mygenerator3
print type(mygenerator3)
結果:
mygenerator2= [0, 1, 16]
mygenerator3= []
參考:http://python.jobbole.com/81881/
https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do