3
我读过math.sqrt
比**
快,今天我试了一下。但有趣的是不是值这两个而是变量**
之间的时间差和**
之间的时间差:变量查询:为什么**的变量如此慢于值
value1 = 10.1
value2 = 0.5
%timeit value1 ** value2
# 1000000 loops, best of 3: 645 ns per loop
%timeit 10.1 ** 0.5
# 10000000 loops, best of 3: 60.7 ns per loop
这是快十倍以上。而对于数学函数的时机几乎是相同的(多用于变量查找只有几个纳秒):
import math
%timeit math.sqrt(10.1)
# 1000000 loops, best of 3: 529 ns per loop
%timeit math.sqrt(value1)
# 1000000 loops, best of 3: 568 ns per loop
任何人都可以解释为什么变量查找使得这种巨大的差异为**
,同时它使math.sqrt
差别不大?
设置:
- 蟒蛇3.5
- 的Windows 10的64位
很好知道这样的操作是事先执行的。这真的让我感到惊讶,但它是有道理的。你碰巧知道这些计算的时间?因为通常'%timeit'会打印一条消息,如果一次运行比其他运行时间长得多,并且情况并非如此。 – MSeifert
编译时间,所以'%timeit'没有警告,因为它一遍又一遍地运行相同的'LOAD_CONST'。 –