【发布时间】:2018-07-24 17:11:11
【问题描述】:
import time
def e(x):
return x**x
def ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ(x):
return x**x
a = 0
start = time.process_time_ns()
a = e(7)
lap = time.process_time_ns()
a = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ(7)
end = time.process_time_ns()
print(lap-start)
print(end-lap)
我正在测试 python 函数的名称是否决定了调用速度,但令人惊讶的是,e() 比Z() 慢得多。我什至在计时之前定义了变量,但Z() 仍然更快。这是为什么呢?
【问题讨论】:
-
这不是确定性能的可靠方法。使用
timeit;我得到e也许会稍微快一点,但不会快很多。 -
这不是一种可靠的计时方式。使用
timeit的性能相同:In [32]: %timeit e(100) 842 ns ± 12.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [33]: %timeit ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ(100) 834 ns ± 12.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) -
不是。您的计时方法存在缺陷和偏见,因为现代操作系统在运行程序时不仅仅是屏住呼吸。您的计算机总是忙于许多不同的事情,而这些事情也需要时间。使用
timeit模块来解决这个问题并采取多种措施。 -
我试试
-
切换调用的顺序,你会发现先来的耗时更长。您正在计算启动成本。
标签: python python-3.x function