联系
Python 中有个内置标准模块——time 模块,该模块提供了各种时间相关的函数。
而在 time 模块中有两个函数:clock() 和 time(),都能用作计算程序运行的时间,其用法如下:
- clock()
import time
# 创建列表推导式时间开销
time.clock()
list_ = [x for x in range(0, 1000000, 2)]
lt = time.clock()
print(f'创建列表推导式时间开销:{lt}')
# 运行结果:
创建列表推导式时间开销:0.0389006
- time()
import time
# 创建列表推导式时间开销
start = time.time()
list_ = [x for x in range(0, 1000000, 2)]
end = time.time()
print(f'创建列表推导式时间开销:{end - start}')
# 运行结果:
创建列表推导式时间开销:0.03390932083129883
从结果可以看出,除了时间的精确位数不同外,那还有其他的什么区别呢?
区别
time.clock()
在 Unix 上,将当前处理器时间返回为以秒为单位的浮点数。精确度,实际上是“处理器时间”含义的定义,取决于同名 C 函数的精度。
在 Windows 上,此函数返回自第一次调用此函数以来经过的 wallclock 秒数,作为浮点数,基于Win32函数 QueryPerformanceCounter()。分辨率通常优于1微秒。
由于程序是在 Windows 上运行的,在创建列表之前调用了一次 time.clock() 函数,创建完后第二次调用 time.clock() 时,会返回一个 wallclock 秒数的浮点数,作为程序运行的一个时间差。
time.time()
返回以浮点数表示的从 epoch 开始的秒数的时间值。 epoch 的具体日期和 leap seconds 的处理取决于平台。 在 Windows 和大多数 Unix 系统中, epoch 是 1970 年 1 月 1 日 00:00:00 (UTC),并且闰秒将不计入从 epoch 开始的秒数。 这通常被称为 Unix 时间。 要了解给定平台上 epoch 的具体定义,请查看 gmtime(0)。
epoch 是时间开始的点,并且取决于平台。对于Unix,epoch 是1970年1月1日00:00:00(UTC)。要找出给定平台上的 epoch,请查看 time.gmtime(0) 。
UTC 是协调世界时(以前称为格林威治标准时间,或 GMT)。缩写 UTC 不是错误,而是英语和法语之间的妥协。
print(time.gmtime(0))
# 运行结果:
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
请注意,即使时间总是作为浮点数返回,但并非所有系统都提供高于1秒的精度。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。
返回的数字 time() 可以通过将其传递给 gmtime() 函数或转换为 UTC 中更常见的时间格式(即年、月、日、小时等)或通过将它传递给 localtime() 函数获得本地时间。在这两种情况下都返回一个struct_time 对象,日历日期组件可以从中作为属性访问。
t = time.time()
print(time.gmtime(t))
print(time.localtime(t))
# 运行结果:
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=6, tm_hour=8, tm_min=51, tm_sec=30, tm_wday=6, tm_yday=341, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=6, tm_hour=16, tm_min=51, tm_sec=30, tm_wday=6, tm_yday=341, tm_isdst=0)
Tips:其他的详细介绍还请查看 Python 官方文档(可以设置中文):https://docs.python.org/zh-cn/3.6/library/time.html