发电机速度在python 3中

Wil*_*ill 8 python python-3.x

我正在浏览有关某人发布的生成器链接.在开始时,他比较了下面的两个函数.在他的设置中,他发现发电机的速度增加了5%.

我正在运行Windows XP,python 3.1.1,似乎无法复制结果.在使用提供的日志和最多1GB的重复数据进行测试时,我一直在显示"旧方式"(logs1)稍快一些.

有人可以帮我理解发生的事情有什么不同吗?

谢谢!

def logs1():
    wwwlog = open("big-access-log")
    total = 0
    for line in wwwlog:
        bytestr = line.rsplit(None,1)[1]
        if bytestr != '-':
            total += int(bytestr)
    return total

def logs2():
    wwwlog = open("big-access-log")
    bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog)
    getbytes      = (int(x) for x in bytecolumn if x != '-')
    return sum(getbytes)
Run Code Online (Sandbox Code Playgroud)

*编辑,间隔在复制/粘贴中混乱

小智 9

对于它的价值,演示中速度比较的主要目的是指出使用生成器不会带来巨大的性能开销.许多程序员在第一次看到生成器时,可能会开始怀疑隐藏的成本.例如,幕后会出现各种奇特的魔法吗?使用此功能会使我的程序运行速度慢两倍吗?

一般情况并非如此.该示例旨在表明生成器解决方案可以以基本相同的速度运行,如果在某些情况下不是稍快一些(尽管它取决于情况,Python的版本等).如果你观察到两个版本之间在性能上的巨大差异,那么这将是值得研究的事情.