1. 程式人生 > >[Python]小甲魚Python視頻第044課(魔法方法:簡單定制 )課後題及參考解答

[Python]小甲魚Python視頻第044課(魔法方法:簡單定制 )課後題及參考解答

這一 運行 RoCE mon 參考 fun 再次 答案 sel

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 19 14:43:06 2019

@author: Administrator
"""

import time 

"""
動動手
0. 按照課堂中的程序,如果開始計時的時間是(2022年2月22日16:30:30),停止時間是(2025年1月23日15:30:30),那按照我們用停止時間減開始時間的計算方式就會出現負數,你應該對此做一些轉換。
"""

class TimerTest():
    def __init__(self):
        self.start_time  = time.localtime()
        self.start_year  = self.start_time.tm_year
        self.start_mon   = self.start_time.tm_mon
        self.start_mday  = self.start_time.tm_mday
        self.start_hour  = self.start_time.tm_hour
        self.start_min   = self.start_time.tm_min
        self.start_sec   = self.start_time.tm_sec
        self.start_wday  = self.start_time.tm_wday
        self.start_yday  = self.start_time.tm_yday
        self.start_isdst = self.start_time.tm_isdst
        #print(self.start_time)
        #print(self.start_hour)
        count1 = time.perf_counter()
        print(‘count1 = %f‘ % count1)
        time.sleep(2)
        count2 = time.perf_counter()
        print(‘count2 = %f‘ % count2)
        print(‘count2-count1 = %f‘ % (count2-count1) )

#tt1 = TimerTest()

"""
1. 相信大家已經意識到不對勁了:為毛一個月一定要31天?不知道有可能也是30天或者29天嗎?(上一題我們的答案是假設一個月31天)
沒錯,如果要正確得到月份的天數,我們還需要考慮是否閏年,還有每月的最大天數,所以太麻煩了……如果我們不及時糾正,我們會在錯誤的道路上越走越遠……
所以,這一次,小甲魚提出了更優秀的解決方案(Python官方推薦):用 time 模塊的 perf_counter() 和 process_time() 來計算,其中 perf_counter() 返回計時器的精準時間(系統的運行時間); process_time() 返回當前進程執行 CPU 的時間總和。
題目:改進我們課堂中的例子,這次使用 perf_counter() 和 process_time() 作為計時器。
另外增加一個 set_timer() 方法,用於設置默認計時器(默認是 perf_counter(),可以通過此方法修改為 process_time())。
"""
class TimerTest1():
    def __init__(self):
        self.count_func = time.perf_counter
        self.start = self.count_func()
        self.end = 0
    def set_timer(self):
        self.count_func = time.process_time
        self.start = self.count_func()
        self.end = 0
    def timerend(self):
        self.end = self.count_func()
        self.duration = self.end - self.start
        print("duration  =  %f s" % self.duration )
        
#timeTest1 = TimerTest1()
#time.sleep(3)
#timeTest1.timerend()
#timeTest1.set_timer()
#time.sleep(3)
#timeTest1.timerend()
#perf_counter()



"""
2. 既然咱都做到了這一步,那不如再深入一下。再次改進我們的代碼,讓它能夠統計一個函數運行若幹次的時間。
要求一:函數調用的次數可以設置(默認是 1000000 次)
要求二:新增一個 timing() 方法,用於啟動計時器
"""


class TimerTest3():
    def __init__(self,times = 1000):
        self.count_func = time.perf_counter
        self.start = 0
        self.end = 0
        self.times = times
    def set_timer(self):
        self.count_func = time.process_time
        self.start = 0
        self.end = 0
    def run_times(self):
        self.start = self.count_func()
        for i in range(self.times):
            for j in range(20):
                pass
        time.sleep(2)
        self.end = self.count_func()
        self.duration = self.end - self.start
        
        print("duration  =  %f s" % self.duration )
        
timeTest3 = TimerTest3(100000*2)
timeTest3.run_times()
timeTest3.set_timer()
timeTest3.run_times()
        
    

  

[Python]小甲魚Python視頻第044課(魔法方法:簡單定制 )課後題及參考解答