两倍之差

2024-09-28 22:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一些代码的性能测试两次之间的差异。首先,我获取环境的本地时间,运行要进行性能测试的代码,然后再次获取本地时间。然后我减去时间,看看考试花了多长时间。我尽量精确到分、秒和微秒。
我发现有趣的是,如果我在每次获得时间后都设置一个打印,这会起作用:

startTest= datetime.datetime.now()
print startTest

我得到:

^{pr2}$

但是,如果我在得到当地时间后不添加任何打印语句,则会失败,这是我正在做的:

import datetime

startTest= datetime.datetime.now()
      #Code to be Tested#
endTest= datetime.datetime.now()
testTime = endTest - startTest
print 'TotalTime:  ',testTime 

这样可以得到以下输出:

TotalTime:  0:00:00

你知道如何以0:00:00.000000的格式打印出来吗?在


Tags: 代码datetime环境时间差异语句性能now
2条回答

只有在datetime.timedelta对象的microseconds属性中存在非零值时,才会打印微秒。在

如果你想要一个不同的行为,写你自己的字符串格式化函数。比如:

def delta_to_string(tdelta):
    return '%s days, %02d:%02d:%09.6f' % (
        tdelta.days,
        tdelta.seconds / 3600,
        (tdelta.seconds / 60) % 60,
        (tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))

%09.6f格式表示浮点数(包括十进制数)总计9位数,必要时加前导0,小数部分最多6位数。如果您想要更多或更少的位数,您必须同时更改总位数和小数部分-小数点后10位为%013.10f。在

这将打印timedelta对象的每个部分。让我们试试:

^{pr2}$

我想你想保留不打印天数的功能,如果天数是0。。。在

def delta_to_string(tdelta):
    return '%s%02d:%02d:%09.6f' % (
        ('%s days, ' % tdelta.days) if tdelta.days else '',
        tdelta.seconds / 3600,
        (tdelta.seconds / 60) % 60,
        (tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))

现在的结果是:

^{4}$

与内置的str函数的行为方式不同。。。我将把这些差异留给“读者练习”

这并不能直接回答您的问题,但是您可以看看Pythonstimeit模块 http://docs.python.org/2/library/timeit.html 用于小代码段的性能测试。在

相关问题 更多 >