python - 在 python 中测量时间的异常结果

标签 python performance time

这是我的秒表课

import time

class StopWatch:

    def __init__(self, tag="", startTime=time.time(), elapsedTime=-1):
        self._tag=tag
        self._elapsedTime=elapsedTime
        self._startTime=startTime

    # other codes here............#

    def stop(self, tag=None):
        if tag is not None:
            self._tag = tag
        self._elapsedTime = time.time() - self._startTime
        return self

    def getStartTime(self):
        return self._startTime

秒表测试文件为:

import unittest
import time
from metric.StopWatch import StopWatch

class StopWatchTest(unittest.TestCase):

    def test_stopwatch(self):
        now=time.time()
        print "now:%f" % now

        stopwatch=StopWatch("firstHook")
        print "start time:%r" % stopwatch.getStartTime()
        self.assertTrue(stopwatch.getStartTime()>now, "start time is wrong")

我得到的错误是:

now:1364791630.047630
start time:1364791629.158797

..

AssertionError: start time is wrong

稍后执行的代码显示较早的时间。这背后的原因是什么?

最佳答案

默认参数只计算一次。

def __init__(self, tag="", startTime=time.time(), elapsedTime=-1):
    self._tag=tag
    self._elapsedTime = elapsedTime
    self._startTime = startTime

要修复,我们需要显式检查默认值并在函数体中评估它们:

def __init__(self, tag="", startTime=None, elapsedTime=-1):
    self._tag=tag
    self._elapsedTime = elapsedTime
    if startTime is None:
        startTime = time.time()
    self._startTime = startTime

关于python - 在 python 中测量时间的异常结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737816/

相关文章:

python - 清理 matplotlib imshow 中好数据和坏数据之间的模糊边界

python - Pandas 按 block 而不是单个值进行分组

PHP 什么时候应该执行 shell,而不是内部 PHP 函数。表现?安全?

ruby - 为什么这个 XML 解析 Ruby 代码在禁用 GC 的情况下运行得更慢?

performance - Elasticsearch 中的多索引搜索与单索引搜索

php - MySQL NOW() 和 PHP 日期 ('c' 之间的区别)

python - 在 Python 的 csv 字典中创建字典列表

导入 facebook-sdk 时 Python 打印两次

java - 不将对象的实例分配给变量是不好的做法吗?

PHP 设置 Mysql 每小时限制