python--timeit

timeit模块主要是用来测试某一段代码执行总共用了多长时间。

其实用time模块也可以做到,但是当我们需要进行深度优化,而且当前这段代码执行很快又看不出差异的时候,那么timeit模块就闪亮登场了

import timeit


time1 = timeit.Timer(stmt="print(123)")
# Timer里面主要用到三个参数,stmt,setup,timer
# stmt参数是要测试的代码语句
# setup参数是运行代码是需要的设置
# timer参数是一个定时器参数,与平台有关

# 再调用time1下的timeit方法,接受一个int,代表执行多少次,默认为一百万次,让后返回执行所用的时间
t1 = time1.timeit(number=10000)  # 默认一百万,这里我们指定一万
print("用时:",t1)
# 程序运行结果
'''
打印一万次123之后,
用时:0.06142749650236608
'''
import timeit

# 也可以使用函数

# 先定义一个装有十万数据的列表
li = range(100000)

# 计算列表内所有元素的和

# 方法一
def test1():
    s = 0
    for i in li:
        s += i
    return "method one,s=%s"%s

# 方法二
def test2():
    return "method one,s=%s"%sum(li)


if __name__ == '__main__':

    # stmt是要执行的函数,setup是执行函数需要满足的条件。
    # 就像我们使用time模块下的函数时,要导入time模块,这里要从当前模块下导入test1
    time1 = timeit.Timer(stmt="test1()",setup="from __main__ import test1")
    time2 = timeit.Timer(stmt="test2()",setup="from __main__ import test2")

    t1 = time1.timeit(10000)  # 默认为一百万
    t2 = time2.timeit(10000)

    print("test1 costs time:",round(t1,4))
    print("test2 costs time:",round(t2,4))
    # 程序运行结果
    '''
    test1 costs time: 41.7879
    test2 costs time: 15.284
    '''
import timeit

# timeit.Timer()下除了timeit之外,还有一个repeat方法。
# 用来循环测试多少次,把每一次测算的结果按照次数的顺序添加到列表中

li = range(1000)  # 为了快速计算,只放入一千个数据来进行测试

# 方法一
def test1():
    s = 0
    for i in li:
        s += i
    return "method one,s=%s"%s

# 方法二
def test2():
    return "method one,s=%s"%sum(li)

if __name__ == '__main__':
    time1 = timeit.Timer("test1()","from __main__ import test1")
    time2 = timeit.Timer("test2()","from __main__ import test2")

    # 调用repeat方法,接受两个参数,第一个参数代表循环测试的次数,第二个参数代表每进行一次测试就要对函数重复测试多少次
    # 举个栗子
    t1 = time1.repeat(repeat=3,number=100000)
    t2 = time1.repeat(repeat=3,number=100000)

    print("method one costs time:",t1)
    print("method two costs time:",t2)

    # 程序运行结果
    '''
    method one costs time: [5.003065601564169, 4.9893358248161706, 5.038256834418386]
    method two costs time: [5.0313725414728605, 5.07020445682916, 5.065527153249928]
    '''
    # 可以看出repeat只比timeit多了一个参数,那就是测试的次数
    # 相当于进行了三次timeit,然后每个timeit的结果放在了列表里

猜你喜欢

转载自www.cnblogs.com/traditional/p/9199065.html