Posts Tagged ‘Iterator’

File Iterator

Saturday, January 2nd, 2010

《Learning Python》中介绍了Iterator Protocol,很多Built-in对象都实现了它。对于语言内部的实现或者其他类型使用Iterator的效率没有测试,只是简单的测试了File Iterator。先是准备了一个330M的文件,然后用推荐的写法和传统的readlines写法读入文件的内容。

传统的写法:

def read_files_readlines():
    print str(datetime.datetime.now())
    data = ''
    f = open('test.data', 'r')
    for line in f.readlines():
        data += line
    print str(datetime.datetime.now())

推荐的写法:

def read_files_iterators():
    data = ''
    print str(datetime.datetime.now())
    for line in open('test.data'):
        data += line
    print str(datetime.datetime.now())

测试的结果使用Iterator在速度上的优势并不明显,只是比readlines函数快了几秒;但是在内存方面Iterator全面胜出,内存最高使用了200M,readlines的方法占用了1000M左右。推荐在Python的代码中使用Iterator的写法,尤其是在web方面的应用。