python3性能:循环使用range()与普通的old while()

2024-06-07 11:11:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3中,我发现如果我替换

for i in range(n):

对账单

while i < n:

我获得了显著的运行时增益。我的循环本身并不充实,因为它做了一些基本的算术运算。你知道吗

有什么线索能说明我为什么会看到这种行为吗?你知道吗

编辑:n的范围是K、10K、12K等的10s 我观察到的计时是.19s,12K,12s,10K,while循环。而使用“while”循环,我看到12K是.11秒,10K是.08秒。 这是我的程序:

target = 0
i = 1
#for i in range(1, n+1):
while i < n+1:
    target += i * (2 ** (i - 1)) + (i * (i + 1))//2
    i += 1

return target % (10 ** 9 + 7)

Tags: in程序编辑targetforreturn增益range
1条回答
网友
1楼 · 发布于 2024-06-07 11:11:57

range涉及少量固定开销(首先在全局中查找range,然后在内置中查找,然后是泛型函数调用调度和分配/初始化对象的成本);如果n足够小,则不会在减少的每循环成本上得到弥补:

In [1]: %%timeit -r5 n = 3
   ...: for i in range(n):
   ...:     pass
   ...:
365 ns ± 15.1 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)

In [2]: %%timeit -r5 n = 3
   ...: i = 0
   ...: while i < n:
   ...:     i += 1
   ...:
252 ns ± 16.9 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)

但是,当n达到中等大小时,每项开销的减少会带来回报:

In [3]: %%timeit -r5 n = 10
   ...: for i in range(n):
   ...:     pass
   ...:
461 ns ± 18.1 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)

In [4]: %%timeit -r5 n = 10
   ...: i = 0
   ...: while i < n:
   ...:     i += 1
   ...:
788 ns ± 73.6 ns per loop (mean ± std. dev. of 5 runs, 1000000 loops each)

range涉及更高的固定成本,但每项成本更低,仅此而已。你知道吗

相关问题 更多 >

    热门问题