
我們先來看一下python3中help(time):


關于time庫中表示時間的方法,官方給出了2種:
1.從1970-01-01 00:00:00 UTC,開始到現在所經歷的時間,以浮點數的'秒'來表示
>>>time.time()
1517362540.347517
2.用結構化的時間組(year,month,day,hours,minutes,seconds....)來表示從1970-01-01 00:00:00 UTC,開始到現在所經歷的時間.
>>>time.gmtime()
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=1, tm_min=37,
tm_sec=36, tm_wday=2, tm_yday=31, tm_isdst=0)
time包中的功能都很實用:
time.clock()返回程序運行的整個時間段中中CPU運行的時間,下面會重點介紹
time.sleep()爬蟲中常用,讓程序暫停執(zhí)行指定的秒數,如time.sleep(2)
time.localtime()用結構化的時間組,表示本地時間
>>>time.localtime()
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=46, tm_sec=7, tm_wday=2, tm_yday=31, tm_isdst=0)
>>>type(time.localtime())
<class 'time.struct_time'>
time.ctime()用字符串string類型表示時間。
>>> time.ctime()
'Wed Jan 31 09:49:09 2018'
time.mktime()將本地時間列表轉化為浮點數的秒來表示
>>> time.mktime(time.localtime())
1517363569.0
time.strftime()將時間組時間轉化為指定格式的String類
>>> time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
'2018-01-31 10:04:26'
time.strptime()將String類時間轉化為時間組格式
>>> time.strptime(time.ctime())
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=10, tm_min=6, tm_sec=1, tm_wday=2, tm_yday=31, tm_isdst=-1)
time.tzset()更改本地時區(qū)(這個功能表示沒用過~)
現在我想用time來計算一下程序執(zhí)行的時間:
定義一個函數run():
def run():
start = time.time()
for i in range(1000):
j = i * 2
for k in range(j):
t = k
print(t)
end = time.time()
print('程序執(zhí)行時間: ',end - start)

可以看到,程序執(zhí)行時間是5.73039174079895s。
現在,讓我們用time.clock()來看看程序執(zhí)行過程中CPU執(zhí)行了多長時間:
def run2():
start = time.clock()
for i in range(1000):
j = i * 2
for k in range(j):
t = k
print(t)
end = time.clock()
print('CPU執(zhí)行時間: ',end - start)

可見,此段代碼CPU執(zhí)行時間為:5.3150249999999915。
那么問題來了,CPU真的執(zhí)行了這么長時間么?會不會有什么東西是我沒考慮進去的呢?
仔細看一下,這段程序主要內容就是兩個for循環(huán),for循環(huán)執(zhí)行計算的時候CPU肯定是在運行的,那么print()函數打印期間這個時間段的CPU執(zhí)行時間有沒有算進去?
帶著疑問,我們進行第三次測試,此次我們去掉print(),直接讓CPU完成整個for循環(huán)的計算:
def run3():
start = time.clock()
for i in range(1000):
j = i * 2
for k in range(j):
t = k
end = time.clock()
print('CPU執(zhí)行時間: ',end - start)
結果:
>>> run3()
CPU執(zhí)行時間: 0.04683999999997468
可以看見,CPU的執(zhí)行時間瞬間降低到0.04s,細想一下,其實不難理解。
因為去掉了print(),所以整個run3()函數就只剩下完整的for循環(huán),CPU可以連續(xù)執(zhí)行,(不必一遍for循環(huán)一邊print()來回切換),連續(xù)執(zhí)行的CPU還是很快的~
所以,這給了我一個啟發(fā),以后寫代碼時,要精簡不必要的開銷,譬如經常使用print()。。。