簡體   English   中英

在python中測量時間的異常結果

[英]unusual result in measuring time in python

這是我的秒表課

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):

在Python解釋器到達時進行評估(因為盡管有名稱,但它實際上是編譯代碼,盡管是字節代碼)。 因此,startTime是在定義類時設置的,而不是在調用__init__時設置的。

更改為:

def __init__(self, tag="", start_time=None, elapsed_time=-1):
    if start_time is None:
        start_time = time.time()
    self._tag=tag
    self._elapsed_time=elapsed_Time
    self._start_time=start_time

默認參數僅計算一次。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM