time库是Python提供的处理时间标准库。time库提供系统级精确计时器的计时功能,可以用来分析程序性能,也可以让程序暂停运行时间。
2.1.1 时间处理函数
import time
first_time=time.time()#获取初始时间
#程序运行
a=0
for i in range(10000000):a+=1
#程序结束
last_time=time.time()#获取结束时间
print(last_time-first_time,'秒')
--输出
1.4615564346313477 秒#计算机运行一千万次运算只需要1.5秒
import time
print(time.gmtime())
--输出
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=2, tm_hour=2, tm_min=20, tm_sec=13, tm_wday=4, tm_yday=336, tm_isdst=0)
import time
print(time.gmtime())
--输出
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=2, tm_hour=10, tm_min=20, tm_sec=13, tm_wday=4, tm_yday=336, tm_isdst=0)
#其中的wday为4,代表程序运行时为周五,原因是计算机输出为0-6,对应周一到周日
#tm_day为336代表今日为本年第336天
import time
print(time.ctime())
--输出
Fri Dec 2 10:24:58 2022
2.1.2 时间格式化
import time
print(time.mktime(time.gmtime()))
print(time.mktime(time.localtime()))
--输出
1669919649.0
1669948449.0
import time
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))#可以拼接组合输出的形式
--输出
2022-12-02 10:42:13
time.strptime(str1,str2)函数:与strftime()函数完全相反,用于提取字符串中的时间来生成struct_time对象,可以很灵活的作为time模块的输入接口
其中str1为字符串格式的时间,str2对应str1的格式,按照格式识别struct_time的元素。
import time
print(time.strptime("2022-12-02 10:42:13","%Y-%m-%d %H:%M:%S"))
--输出
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=2, tm_hour=10, tm_min=42, tm_sec=13, tm_wday=4, tm_yday=336, tm_isdst=-1)
2.1.3 程序计时
import time
first_time=time.time()
last_time=time.time()
print(last_time-first_time)
--输出
0.0#程序运行耗时不到0.1s#加上睡眠时间
import time
first_time=time.time()
time.sleep(2)
last_time=time.time()
print(last_time-first_time)
--输出
2.0001230239868164#程序耗时加上了2s睡眠时间
import time
#使用time()函数计时
b1=time.time()
b2=time.time()
print(b2-b1)
#使用perf_counter()函数计时
a1=time.perf_counter()
a2=time.perf_counter()
print(a2-a1)
--输出
0.0
2.00001522898674e-07#可以看到perf_counter()函数的精度远高于time函数#当加上睡眠时间时,time函数的精度和perf_counter()函数类似
import time
b1=time.time()
a1=time.perf_counter()
time.sleep(2)#运行两秒睡眠
a2=time.perf_counter()
b2=time.time()
print(b2-b1)
print(a2-a1)
--输出
2.0002999305725098
2.0003594998270273
perf_counter()函数包括了在睡眠期间的时间,并且是系统范围的。返回值的引用点是未定义的,因此只有连续调用的结果之间的差异是有效的。
2.1.4 综合练习—程序进度条
import time
#模拟进度条显示
scale=50
print("------------程序开始执行")
start_time=time.perf_counter()
for i in range(scale+1):a="*"*ib="."*(scale-i)c=(i/scale)*100dur=time.perf_counter()-start_timeprint("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")time.sleep(0.1)print("\n------------程序执行结束")#增加/n保证输出时换行
其中:
①使用\r表示将光标的位置退回本行的开头,end=""则表示不换行,两者结合保证输出一直只有一行
②{:3.0f}中代表居中,3代表长度为3,.0代表精度为小数点0位,f为浮点型
输出效果:
运行过程中:
运行结束: