2.1 time库
time库是Python提供的处理时间标准库。time库提供系统级精确计时器的计时功能,可以用来分析程序性能,也可以让程序暂停运行时间。
2.1.1 时间处理函数
- time.time()函数:获取当前时间戳。 代表着如今的时间与1970年1月1日0分0秒的时间差(以秒为单位);1970年是计算机元年。
time()函数可以用于获取程序运行时间。
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秒
- time.gmtime():获取当前时间戳对应的struct_time对象,为世界统一时间,而非北京时间。
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)
- time.gmtime():获取当前时间戳对应的struct_time对象,为本地时间。
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天
- time.ctime():获取当前时间戳对应的易读字符串表示,内部会调用time.localtime()函数以输出当地时间。
import time
print(time.ctime())
--输出
Fri Dec 2 10:24:58 2022
- struct_time对象
2.1.2 时间格式化
- time.mktime(t)函数:可以将struct_time对象t转换为时间戳,因此mktine()函数可以说是gmtime()和localtime()的反函数
import time
print(time.mktime(time.gmtime()))
print(time.mktime(time.localtime()))
--输出
1669919649.0
1669948449.0
- time.strftime(t)函数:t为struct_time对象,该函数是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。该方法利用一个格式字符串,对时间格式进行表达。
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 程序计时
- time.sleep()函数:推迟调用线程的时间,可通过参数secs(指秒数),表示进程挂起的时间。
sleep函数多会应用于多线程程序中。
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睡眠时间
- time.perf_counter()函数:返回一个性能计数器的值(在分秒内),即一个具有最高可用分辨率的时钟,可以测量非常短的时间。
perf_counter()函数作用和time()函数类似,但是精度要高于time()函数。
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="*"*i
b="."*(scale-i)
c=(i/scale)*100
dur=time.perf_counter()-start_time
print("\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为浮点型
输出效果:
运行过程中:
运行结束: