python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?
原標(biāo)題:技術(shù)圖文:如何利用 Python 做一個(gè)簡單的定時(shí)器類?
背景
今天在B站上看有關(guān) Python 最火的一個(gè)教學(xué)視頻 -- “零基礎(chǔ)入門學(xué)習(xí) Python”,這也是我們 Python基礎(chǔ)刻意練習(xí)活動(dòng) 的推薦視頻教程。
python視頻
在學(xué)習(xí)魔法方法的時(shí)候,有一節(jié)視頻是制作一個(gè)簡單的定時(shí)器類,基本要求如下:
定制一個(gè)計(jì)時(shí)器的類。
start和stop方法代表啟動(dòng)計(jì)時(shí)和停止計(jì)時(shí)。
假設(shè)計(jì)時(shí)器對象t1,print(t1)和直接調(diào)用t1均顯示結(jié)果。
當(dāng)計(jì)時(shí)器未啟動(dòng)或已經(jīng)停止計(jì)時(shí)時(shí),調(diào)用stop方法會(huì)給予溫馨的提示。
兩個(gè)計(jì)時(shí)器對象可以進(jìn)行相加:t1+t2。
只能使用提供的有限資源完成。
技術(shù)分析
Python 的time模塊中,時(shí)間表現(xiàn)的格式主要有三種:
timestamp時(shí)間戳,時(shí)間戳表示的是從1970年1月1日00:00:00開始按秒計(jì)算的偏移量。
struct_time時(shí)間元組,共有九個(gè)元素組。
format time格式化時(shí)間,用格式化的結(jié)構(gòu)使時(shí)間更具可讀性。包括自定義格式和固定格式。
獲取時(shí)間戳
time.time返回當(dāng)前時(shí)間的時(shí)間戳(1970紀(jì)元后經(jīng)過的浮點(diǎn)秒數(shù))。
importtime
ticks = time.time
print( '當(dāng)前時(shí)間戳為:', ticks) # 當(dāng)前時(shí)間戳為: 1570793479.162907
獲取當(dāng)前時(shí)間元組
time.localtime([sec])格式化時(shí)間戳為本地的時(shí)間。如果sec參數(shù)未輸入,則以當(dāng)前時(shí)間為轉(zhuǎn)換標(biāo)準(zhǔn)。
importtime
localtime = time.localtime(time.time)
print( "本地時(shí)間為 :", localtime)
# 本地時(shí)間為 : time.struct_time(tm_year=2019, tm_mon=10, tm_mday=11, tm_hour=19, tm_min=35, tm_sec=31, tm_wday=4, tm_yday=284, tm_isdst=0)
tm_year:4位數(shù)年
tm_mon:月
tm_mday:日
tm_hour:小時(shí)
tm_min:分鐘
tm_sec:秒
tm_wday:一周的第幾日,0到6 (0是周一)
tm_yday:一年的第幾日
tm_isdst:夏令時(shí),值有:1(夏令時(shí))、0(不是夏令時(shí))、-1(未知),默認(rèn) -1
獲取格式化的時(shí)間
time.asctime([tupletime])接受時(shí)間元組并返回一個(gè)可讀的形式。
importtime
t = time.localtime
print( "本地時(shí)間為 : %s "% time.asctime(t))
# 本地時(shí)間為 : Fri Oct 11 19:42:34 2019
格式化時(shí)間
time.strftime(format[,tupletime])接收以時(shí)間元組,并返回以可讀字符串表示的當(dāng)?shù)貢r(shí)間,格式由format決定。
time.strptime(str,format='%a %b %d %H:%M:%S %Y')根據(jù)format的格式把一個(gè)時(shí)間字符串解析為時(shí)間元組。
time.mktime(tupletime)接受時(shí)間元組并返回時(shí)間戳(1970紀(jì)元后經(jīng)過的浮點(diǎn)秒數(shù))。
importtime
print(time.strftime( "%Y-%m-%d %H:%M:%S", time.localtime))
# 2019-10-11 19:48:31
print(time.strftime( "%a %b %d %H:%M:%S %Y", time.localtime))
# Fri Oct 11 19:48:31 2019
a = "Fri Oct 11 19:48:31 2019"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))
# 1570794511.0
%y 兩位數(shù)的年份表示(00-99)
%Y 四位數(shù)的年份表示(000-9999)
%m 月份(01-12)
%d 月內(nèi)中的一天(0-31)
%H 24小時(shí)制小時(shí)數(shù)(0-23)
%I 12小時(shí)制小時(shí)數(shù)(01-12)
%M 分鐘數(shù)(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應(yīng)的日期表示和時(shí)間表示
%j 年內(nèi)的一天(001-366)
%p 本地A.M.或P.M.的等價(jià)符
%U 一年中的星期數(shù)(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(shù)(00-53)星期一為星期的開始
%x 本地相應(yīng)的日期表示
%X 本地相應(yīng)的時(shí)間表示
%Z 當(dāng)前時(shí)區(qū)的名稱
%% %號本身
Time 模塊
time.gmtime([secs])接收時(shí)間戳(1970紀(jì)元后經(jīng)過的浮點(diǎn)秒數(shù))并返回格林威治天文時(shí)間下的時(shí)間元組。
time.ctime([secs])把一個(gè)時(shí)間戳(按秒計(jì)算的浮點(diǎn)數(shù))轉(zhuǎn)化為time.asctime的形式,作用相當(dāng)于asctime(localtime(secs)),未給參數(shù)相當(dāng)于asctime。
time.sleep(secs)推遲調(diào)用線程的運(yùn)行,secs指秒數(shù)。
代碼實(shí)現(xiàn)
importtime
classMytime(object):
def__init__(self):
self.__info = '未開始計(jì)時(shí)!'
self.__begin = None
self.__end = None
self.__jg = 0
def__str__(self):
returnself.__info
def__repr__(self):
returnself.__info
defstart(self):
print( '計(jì)時(shí)開始...')
self.__begin = time.localtime
defstop(self):
ifnotself.__begin:
print( '提示:請先調(diào)用start開始計(jì)時(shí)!')
return
self.__end = time.localtime
self.__jg = time.mktime(self.__end) - time.mktime(self.__begin)
self.__info = '共運(yùn)行了%d秒'% self.__jg
print( '計(jì)時(shí)結(jié)束!')
returnself.__jg
def__add__(self, other):
return'共運(yùn)行了%d秒'% (other.__jg + self.__jg)
t1 = Mytime
print(t1)
# 未開始計(jì)時(shí)!
t1.stop
# 提示:請先調(diào)用start開始計(jì)時(shí)!
t1.start
# 計(jì)時(shí)開始...
time.sleep( 5)
t1.stop
# 計(jì)時(shí)結(jié)束!
print(t1)
# 共運(yùn)行了5秒
t2 = Mytime
t2.start
# 計(jì)時(shí)開始...
time.sleep( 7)
t2.stop
# 計(jì)時(shí)結(jié)束!
print(t2)
# 共運(yùn)行了7秒
print(t1 + t2)
# 共運(yùn)行了12秒
總結(jié)
這個(gè)題目讓我們熟悉了 Python 中time模塊的使用方法,以及類的定義和類中的一系列魔法方法,如__init__、__str__、__repr__、__add__等等,Python 的魔法方法很是神奇啊,把面向?qū)ο笾械臉?gòu)造函數(shù)、析構(gòu)函數(shù)、運(yùn)算符的重載等全部包含了進(jìn)去。需要好好體會(huì)才能把這塊的知識學(xué)好。今天就這樣吧!See You!
參考文獻(xiàn)
https://www.bilibili.com/video/av4050443
https://www.cnblogs.com/lichunl/p/9098024.html
相關(guān)圖文:
經(jīng)過8年多的發(fā)展,LSGO軟件技術(shù)團(tuán)隊(duì)在「地理信息系統(tǒng)」、「數(shù)據(jù)統(tǒng)計(jì)分析」、「計(jì)算機(jī)視覺」等領(lǐng)域積累了豐富的研發(fā)經(jīng)驗(yàn),也建立了人才培養(yǎng)的完備體系,目前深耕的領(lǐng)域?yàn)椤笝C(jī)器學(xué)習(xí)與量化金融」,歡迎對計(jì)算機(jī)技術(shù)感興趣的同學(xué)加入,與我們共同成長進(jìn)步。
后臺(tái)回復(fù)「搜搜搜」,隨機(jī)獲取電子資源!返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDtune检测硬盘方法步骤
- 下一篇: python服务器搭建 实战_实战讲解: