为了节省内存,可用生成器代替列表,代码执行时才生成数据。
例如:
mygen = (x*x for x in range(3))
print mygen
for i in mygen:
print i
结果
<generator object <genexpr> at 0x7fd3f1862230>
0
1
4
结果:
mygen = (x*x for x in range(3))
print mygen
for i in mygen:
print i
print "again"
for i in mygen:
print i
print "end"
结果:
<generator object <genexpr> at 0x7fd3f1846e60>
0
1
4
again
end
可以看到,再次打印时,没有输出东西。
更具体些,
mygen = (x*x for x in range(3))
print mygen
for i in mygen:
print i
break
print "again"
for i in mygen:
print i
print "end"
此时的结果:
<generator object <genexpr> at 0x7f1440fb6e60>
0
again
1
4
end
两次打印,第二次打印接着上次打印。
而对列表而言
mylist=[x*x for x in range(3)]
for i in mylist:
print i
print "again"
for i in mylist:
print i
print "end"
结果如下,可以看到,两个打印,都可输出结果。
0
1
4
again
0
1
4
end