我在对一些 python 代码进行基准测试时发现了一些奇怪的东西。我使用以下函数来测量遍历空 for 循环所需的速度:
def f(n):
t1 = time.time()
for i in range(n):
pass
print(time.time() - t1)
f(10**6)
打印约 0.035
, f(10**7)
关于 0.35
, f(10**8)
关于 3.5
, 和 f(10**9)
关于 35
.但是f(10**10)
?好了2000
.这当然是出乎意料的。为什么迭代 10 倍的元素需要 60 多倍的时间?导致这种情况的python for循环是什么?这是python特定的,还是在很多语言中都会发生?
最佳答案
当你超过 10^9
你超出了 32 位整数范围。 Python3 然后透明地将您移至 arbitrary precision integers ,分配和使用要慢得多。
一般来说,处理如此大的数字是 Python3 比 Python2 慢得多的领域之一(至少在许多系统上有快速的 64 位整数)。从好的方面来说,它使 python 更易于使用,更少 overflow类型错误。
关于python-3.x - 为什么python的for循环对于大输入如此非线性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662188/