gpt4 book ai didi

产生更多结果的 Python 生成器需要更多时间来创建

转载 作者:太空狗 更新时间:2023-10-30 01:08:21 26 4
gpt4 key购买 nike

我在 Python 中有以下代码:

import time
import sys

def returnlist(times):
t = time.time()
l = [i for i in range(times)]
print "list: {}".format(time.time() - t)
return l

def returngenerator(times):
t = time.time()
g = (i for i in range(times))
print "generator: {}".format(time.time() - t)
return g

g = returngenerator(times)
l = returnlist(times)

1.对于 times = 1000000 我得到的结果:

generator: 0.107323884964

list: 0.225493192673

2.对于 times = 10000000 我得到:

generator: 0.856524944305

list: 1.83883309364

我明白为什么第二个列表需要更多时间来创建,但为什么第二个生成器也需要更多时间?我假设由于惰性求值,它的创建时间与第一个生成器的创建时间大致相同。

我在 Ubuntu 虚拟机上运行这个程序

最佳答案

您的代码中的问题是 range功能。在 Python 2 中,它创建一个列表。对于基准测试中的大型列表,这会成为一个问题。在 Python 3 中,range 返回一个生成器。 Python 2 的解决方法是使用 xrange函数,它也是惰性的。

作为测试,让我们创建一个像您的基准函数,但使用 xrange:

def returngenerator2(times):
t = time.time()
g = (i for i in xrange(times))
print "generator2: {}".format(time.time() - t)
return g

并测试它:

>>> l = returnlist(10**7)
list: 0.580000162125
>>> g = returngenerator(10**7)
generator: 0.115000009537
>>> x = returngenerator2(10**7)
generator2: 0.0
>>> x2 = returngenerator2(10**8)
generator2: 0.0
>>> x3 = returngenerator2(10**9)
generator2: 0.0

似乎有效。 :)

关于产生更多结果的 Python 生成器需要更多时间来创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22935702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com