python 生成器是否比嵌套 for 循环更快?

Are python generators faster than nested for loops?

我在理解生成器时遇到了一些问题。

执行相同任务时,这些函数的执行时间是否不同?

def slow_sum(size):
    x= 0
    for i in range(size):
        for j in range(size):
            x += i + j
    return x

def fast_sum(size):
    return sum( [ (i+j) for j in range(size) for i in range(size)] )

size = 2000
slow_val = slow_sum(size)
fast_val = fast_sum(size)
assert slow_val == fast_val, "Values are not equal"

在我的计算机上使用 cProfile 分析这两个函数时,我得到了这些结果,但我希望它们是相似的。

总时间

原文件:https://pastebin.com/fDfaSqyZ

我的输出:https://pastebin.com/wyy3v3iy

您正在查看分析器输出的错误列。 tottime 不会一直计算 fast_sumsum 调用或列表理解的堆栈框架内花费的时间。您应该查看 cumtime,这两个函数几乎相等。