鬼少 发表于 2024-10-16 21:30:11

python timer程序分析

Hi,有如下一段timer代码:

import time as t

class MyTimer():
    def __str__(self):
      return self.prompt

    __repr__ = __str__
   
    #开始计时
    def start(self):
      self.start = t.localtime()
      print('开始计时.....')
    #计时结束
    def stop(self):
      self.stop = t.localtime()
      self._calc()
      print('计时结束!')


    #内部方法,计算运行时间
    def _calc(self):
      self.lasted = []
      self.prompt = '总共运行了'
      for i in range(6):
            self.lasted.append(self.stop-self.start)
            self.prompt +=str(self.lasted)
      #print(self.prompt)

当执行如下:
>>t1 = MyTimer()
>>t1.start()
>>开始计时.....
>>t1.stop()
>>计时结束!
>>t1
>>总共运行了00001-44

问题: 这里有从调用t1.start()到t1.stop()间隔等的时间有点长, 大概一分钟不到吧, 然后调用t1,为何结果输出是这样的”总共运行了00001-44“?这里的怎么会显示 ”00001-44“ 这样无法看懂的数字?

FishC 发表于 2024-10-16 21:31:08

这段代码的问题主要出在 `_calc` 方法中。让我们分析一下:

1. **`self.lasted` 未初始化**:在 `_calc` 方法中,`self.lasted` 应该是一个列表,但在使用 `append` 方法之前并没有初始化。

2. **时间差计算错误**:`self.stop - self.start` 直接相减是不对的,因为 `t.localtime()` 返回的是一个 `struct_time` 对象,不能直接相减。

3. **字符串拼接问题**:`self.prompt += str(self.lasted)` 这样拼接会导致输出不符合预期。

要修复这些问题,可以这样修改 `_calc` 方法:

def _calc(self):
    self.lasted = []
    self.prompt = '总共运行了'
    for i in range(6):
      self.lasted.append(self.stop - self.start)
      self.prompt += str(self.lasted) + ' '

此外,建议在 `start` 和 `stop` 方法中使用 `time.time()` 来获取时间戳,然后计算时间差,这样更简单和准确。以下是一个改进的版本:

import time as t

class MyTimer():
    def __init__(self):
      self.prompt = "未开始计时"
      self.lasted = []
      self.start_time = 0
      self.stop_time = 0

    def __str__(self):
      return self.prompt

    __repr__ = __str__

    def start(self):
      self.start_time = t.time()
      print('开始计时.....')

    def stop(self):
      self.stop_time = t.time()
      self._calc()
      print('计时结束!')

    def _calc(self):
      self.lasted = self.stop_time - self.start_time
      self.prompt = f'总共运行了 {self.lasted:.2f} 秒'

这样修改后,`t1.start()` 和 `t1.stop()` 之间的时间差会以秒为单位显示,并且输出会更符合预期。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: python timer程序分析