python 学习汇总32:timeit-程序测试( tcy)

timeit-程序测试    2018/9/6

1.简单测试程序的运行时间:
     在一段程序的前后都用上time.time(),然后进行相减  
2.timeit
        相对timeit 细粒度,profile 和 pstats  模块提供针对更大代码块的时间度量工具
        选择传递globals=globals(),这会导致代码在当前的全局名称空间内执行。
    
2.1.函数:
timeit.timeit(stmt ='pass',setup ='pass',timer = <default timer> ,
number = 1000000,globals = None )
用途:
Timer用给定语句设置代码和计时器函数创建一个实例,用timeit()执行测试
全局变量参数指定要在其中执行代码的名称空间
参数:
stmt:  测试代码。字符串表达式,单个变量,函数。
setup: 这将stmt的环境传进去。比如各种import和参数什么的。
timer: 这个参数一般使用不到,具体使用可以参看文档。

    timeit.repeat(stmt ='pass',setup ='pass',timer = <default timer>,repeat = 3,
                    number = 1000000,globals = None )

        Timer用给定语句设置代码和计时器函数创建一个实例,用repeat()执行重复测试
        全局变量参数指定要在其中执行代码的名称空间。
    timeit.default_timer()
        默认定时器time.perf_counter()
2.2.class timeit.Timer(stmt ='pass',setup ='pass',timer = <timer function>  ,
                        globals = None )# 小代码片段的定时执行速度类。

    stmt和setup包含多个由";"或换行符分隔语句,不包含多行字符串文字。
    默认在timeit的名称空间内执行;  可以通过传递一个名称空间给全局变量来控制。

    说明:
        和函数相比多了一个重复调用次数。
        度量一条语句执行时间,用timeit()方法。
        该语句和设置参数也可以采取的是不带参数的可调用的对象。

    timeit(number = 1000000 )
        主要语句的时间编号执行。
        执行一次设置语句,返回多次执行主语句所需时间float秒
    autorange(callback = None )
        自动确定调用次数timeit()
       repeat(repeat = 3,number = 1000000 )
        重复调用timeit()次数
        参数1指定调用多少次timeit();参数2指定timeit()测试次数。

 

3.实例
    
1)测试语句1:timeit  
import timeit

# 实例1:timeit-测试语句
a=timeit.timeit('id=a;name=b',setup='a=1000;b="Tom"',number=1000000)
print('1.1.testTime=',a)

# 实例2:timeit-测试语句
s='id=a;name=b';
a=timeit.timeit(stmt=s,setup='a=1000;b="Tom"',number=1000000)
print('1.2.testTime=',a)

# 实例3:timeit-测试语句
s = """\
id=a
name=b
"""
a=timeit.timeit(stmt=s,setup='a=1000;b="Tom"',number=1000000)
print('1.3.testTime=',a)

# 实例4:timeit.Timer-测试语句
a=timeit.Timer('id=a;name=b','a=1000;b="Tom"').timeit(number=1000000)
print('1.4.testTime=',a)

# 实例5:timeit.Timer-测试语句
t=timeit.Timer('id=a;name=b','a=1000;b="Tom"')

a1=t.timeit(number=1000000)
a2=t.repeat(repeat = 3,number = 1000000)
print('1.5.testTime=',a1,a2)

# 实例6:timeit-测试语句
s='L = [i for i in range(n)]';n=100
a=timeit.timeit(stmt=s,number=100000, globals=globals())
print('2.0.testTime=',a)# setup=传递一个包含导入语句

 

2)  测试函数
# 实例1:timeit-测试函数
import timeit

def test(n):
L = [i for i in range(n)]

#if __name__ == '__main__':
a=timeit.timeit("test(100)", setup="from __main__ import test",number=100000)
print('2.1.testTime=',a)  #2.1.testTime= 0.54220718

# 实例2:timeit-测试函数
import timeit

def test(n):
L = [i for i in range(n)]
n=100

a=timeit.timeit('test(n)',number=100000, globals=globals())
print('2.2.testTime=',a)#2.2.testTime= 0.536649002

# 实例3:timeit-测试多个函数
def f(x):return x**2
def g(x):return x**4
def h(x):return x**8

a=timeit.timeit('[func(42) for func in (f,g,h)]',number=100000,globals=globals())
print('2.3.testTime=',a)

#实例4:timeit.repea-测试重复次数
#repeat和timeit用法相似,多一个repeat参数(重复测试次数=3.),返回时间列表

a=timeit.repeat("test(100)", setup="from __main__ import test",number=100000,repeat=3)
print('3.1.testTime=',a,'min=',min(a))

#实例5:timeit.Timer-测试重复次数
t=timeit.Timer(stmt ='test(n)',setup ='n=100',globals = globals())
a1=t.timeit(number=100000)
a2=t.repeat(repeat = 3,number = 100000)
print('3.2.testTime=',a1,a2,'min=',min(a2))

结果输出

1.1.testTime=  0.04432365000000005
1.2.testTime=  0.04307258300000005
1.3.testTime=  0.044008316999999963
1.4.testTime=  0.04538698299999999
1.5.testTime= 0.044759738999999965 [0.04225173900000001, 0.041612761, 0.04221409500000006]
2.0.testTime=  0.5714974949999999
2.1.testTime=  0.531626156
2.2.testTime=  0.534958423
2.3.testTime=  0.2584878100000001
3.1.testTime= [0.5270306009999999, 0.5233380219999999, 0.5257756219999998] min= < FONT> 0.5233380219999999
3.2.testTime= 0.5361430020000002 [0.5355201569999997, 0.5308390449999996, 0.5279976230000001] min= 0.5279976230000001

 

 

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84078962
今日推荐