2

我最近使用timeit模块对python做了一个非常简单的性能测试。结果着实让我惊呆了:消耗的时间x=x+x大约是125 倍还是为什么?x+xy=x+x,我真的希望有人能给我一些线索,也许我用错了时间?谢谢!

请注意,y=x+x;x=y它和...一样慢,x=x+x但它和...x=x+47一样快x+x

测试基本操作()

testcase="pass",时间间隔:0.001487secs

testcase="x=47",时间间隔:0.002424secs

testcase="x=94",时间间隔:0.002423secs

testcase="x=47*2",时间间隔:0.002423secs

testcase="x+x",时间间隔:0.003922secs

testcase="x*2",时间间隔:0.005307secs

testcase="x=x+x",时间间隔:0.497974secs

testcase="x=x*2",时间间隔:0.727506secs

testcase="x=x+47",时间间隔:0.005770secs

testcase="x=47+x",时间间隔:0.004442secs

testcase="x+=x",时间间隔:0.498920secs

testcase="y=x+x",时间间隔:0.004102secs

testcase="y=x*2",时间间隔:0.006327secs

测试用例="y=x+x

x=y",时间间隔:0.499644 秒

测试用例="x+x

y=x",时间间隔:0.004948secs

测试用例="x+x

x=y",时间间隔:0.005126secs

测试用例="y=10

x=y",时间间隔:0.003351secs

testcase="pass",时间间隔:0.001487secs

我使用的代码:

import timeit
import numpy as npy
def testBasicOps():
    timeitSetup="""
x=47
y=0
"""
    testCases=['pass','x=47',\
               'x=94','x=47*2'\
               ,'x+x','x*2'\
               ,'x=x+x','x=x*2'\
               ,'x=x+47','x=47+x'\
               ,'x+=x','y=x+x'\
               ,'y=x*2','y=x+x\nx=y'\
               ,'x+x\ny=x','x+x\nx=y'\
               ,'y=10\nx=y']
    minT=[]
    tests=[]
    for i in testCases:
        tests.append(timeit.Timer(i,setup=timeitSetup))
        minT.append(npy.mean(tests[-1].repeat(10,int(1e5))))
        print 'testcase=\"%s\", time lapse:%fsecs'%(i,minT[-1])

def main():
    print "#"*10
    print "testBasicOps()"
    testBasicOps()

if __name__ == '__main__':
    main()        
4

1 回答 1

11

当你计算x=x+x数千次时,x就变得非常庞大。您正在测量添加两个非常大的数字所需的时间长度。

于 2012-06-30T06:34:20.670 回答