/* 把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了 */
for line in open("test.txt").readlines():
print line
/* 这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行 */
for line in open("test.txt"): #use file iterators
print line 生成器
生成器的编写方法和函数定义类似,只是在return的地方改为yield。
生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。
生成器自身又构成一个迭代器,每次迭代时使用一个yield返回的值。
需要注意的是,生成器中不需要return语句,不需要指定返回值,在生成器中已经存在默认的返回语句 生成器表达式
(i for i in range(5))
// 返回迭代器
<generator object <genexpr> at 0x7ff3e8f0d960> 列表解析,返回list
[i for i in range(5)]
// 返回list
[0, 1, 2, 3, 4]
在这里存在一个问题,那就是range(5)会返回一个长度为5的数据,如果是range(1000)那么就会占用一个1000大小的数组空间;如果我们采用`生成器`,在需要的时候产生一个数字,那么空间的占用情况就会降低,这里我们可以使用xrange()函数来实现。