为什么 x*=y 在 Python 中比 x=x*y 慢?
Why is x*=y is slower than x=x*y in Python?
我正在尝试优化我在 Python 中编写的一些代码,并且自始至终我都假设在 Python 中编写 [=12] 更有效(或者在最坏的情况下等效) =] 而不是 x = x * y
。但是使用下面的基本测试,情况似乎并非如此
import time
t0 = time.time()
x = 1.01
for i in range(1000000):
x *= 1.000001
print(time.time() - t0)
# Outputs 0.1081240177154541
t0 = time.time()
x = 1.01
for i in range(1000000):
x = x * 1.000001
print(time.time() - t0)
# Outputs 0.07818889617919922
为什么会这样?
我一直在做休闲测试:
def test1(x):
for i in range(10000000):
x *= 1.000001
def test2(x):
for i in range(10000000):
x = x * 1.000001
%timeit test1(1.01)
# 511 ms ± 25.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit test2(1.01)
# 591 ms ± 87.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
差别小到可以说性能一样
正如我的结果所示(与您的结论相反),一台机器与另一台机器或一台 运行 其他
的结果可能不同
我正在尝试优化我在 Python 中编写的一些代码,并且自始至终我都假设在 Python 中编写 [=12] 更有效(或者在最坏的情况下等效) =] 而不是 x = x * y
。但是使用下面的基本测试,情况似乎并非如此
import time
t0 = time.time()
x = 1.01
for i in range(1000000):
x *= 1.000001
print(time.time() - t0)
# Outputs 0.1081240177154541
t0 = time.time()
x = 1.01
for i in range(1000000):
x = x * 1.000001
print(time.time() - t0)
# Outputs 0.07818889617919922
为什么会这样?
我一直在做休闲测试:
def test1(x):
for i in range(10000000):
x *= 1.000001
def test2(x):
for i in range(10000000):
x = x * 1.000001
%timeit test1(1.01)
# 511 ms ± 25.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit test2(1.01)
# 591 ms ± 87.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
差别小到可以说性能一样
正如我的结果所示(与您的结论相反),一台机器与另一台机器或一台 运行 其他
的结果可能不同