网上很多帖子讨论 Python 中计时用 time.clock()
还是用 time.time()
。
time.clock() vs time.time()
time.clock()
计算的是 CPU 的时间,在 windows 平台上精度比较高time.time()
计算的是程序的运行时间,会受到机器负载的影响,除了 windows 以外的平台精度比较高
所以我们可以按照平台来使用不同的方法
1 | #!/usr/bin/env python |
或者呢,直接使用 timeit
模块
1 | #!/usr/bin/env python |
timeit.default_timer()
可以自动选择当前平台适合的计时器,因为它的源代码就是上面那段判断代码。
下面我们重点来介绍下 timeit
模块
timeit
模块提供了一种简单的方法来计算一小段Python代码。 它既有命令行界面,也有可调用界面。 它避免了许多用于测量执行时间的常见陷阱。
timeit
命令行使用
1 | $ python -m timeit '"-".join(str(n) for n in range(100))' |
默认情况下,命令行对小段代码,重复执行三个循环,每个循环执行 10000 次,其中最好的用了 40.3 秒
代码块中使用
1 | >>> import timeit |
number
不指定时,默认为 default_number = 1000000
1 | >>> timeit.repeat(s) |
增加重复次数,使用 repeat()
方法,不指定 repeat
时,默认 default_repeat = 3
命令行语法
1 | python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [statement ...] |
-n N, --number=N
执行statement
的次数-r N, --repeat=N
循环的重复次数,默认:3-s S, --setup=S
最初要执行的语句,默认:pass-t, --time
使用time.time()
计时,在 windows 以外平台默认使用该模式-c, --clock
使用time.clock()
计时,在 windows 平台默认使用该模式-v, --verbose
打印原始计时结果,得到更多数字精度-h, --help
帮助信息
当 -n
不指定时,程序会自动执行 10 的倍数,使执行时间不少于 0.2 秒
-s
可以执行一段前置代码,这在很多场景是很有用的
命令行中使用
1 | $ python -m timeit -s 'text = "sample string"; char = "g"' 'char in text' |
代码块中使用
在代码快中,这个参数更有用处,我们不必把代码都写在字符串中
1 | #!/usr/bin/env python |