Python 两倍之差

Python 两倍之差,python,datetime,python-2.7,localtime,Python,Datetime,Python 2.7,Localtime,我正在尝试获得一些代码的性能测试的两次之间的差异。首先,我获取环境的本地时间,运行要进行性能测试的代码,然后再次获取本地时间。之后,我减去时间,看看考试花了多长时间。我试图精确到分、秒和微秒。 我发现有趣的是,如果我在每次获得时间后设置一个打印: startTest= datetime.datetime.now() print startTest 我得到: TotalTime: 0:00:00.328000 但是,如果我在获得当地时间后不添加任何打印语句,则会失败,这就是我所做的: imp

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

startTest= datetime.datetime.now()
print startTest
我得到:

TotalTime:  0:00:00.328000
但是,如果我在获得当地时间后不添加任何打印语句,则会失败,这就是我所做的:

import datetime

startTest= datetime.datetime.now()
这为我提供了以下输出:

TotalTime:  0:00:00

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

这并不能直接回答你的问题,但是你可以看看Pythons
timeit
模块
用于小代码段的性能测试。

仅当
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
对象的每个部分。让我们试试看:

>>> delta_to_string((datetime.datetime.now() - datetime.datetime.now()))
'0 days, 00:00:00.000000'
我想你想保留不打印天数的功能,如果天数为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.))
现在的结果是:

>>> s1 = datetime.datetime.now()
>>> s2 = datetime.datetime.now()
>>> delta_to_string(s1 - s2)
'-1 days, 23:59:57.387000'
>>> print (s1 - s2)
-1 day, 23:59:57.387000
>>> delta_to_string(s2 - s1)
'00:00:02.613000'
>>> print (s2 - s1)
0:00:02.613000
>>> delta_to_string(s2 - s2)
'00:00:00.000000'
>>> print (s2 - s2)
0:00:00

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

我无法重现,Python的确切版本是什么?查看Python cProfile模块。。。或者timeit模块……我同意,这很奇怪!我正在运行2.7.1,我可以在2.6.6中看到次秒部分。
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.))
>>> s1 = datetime.datetime.now()
>>> s2 = datetime.datetime.now()
>>> delta_to_string(s1 - s2)
'-1 days, 23:59:57.387000'
>>> print (s1 - s2)
-1 day, 23:59:57.387000
>>> delta_to_string(s2 - s1)
'00:00:02.613000'
>>> print (s2 - s1)
0:00:02.613000
>>> delta_to_string(s2 - s2)
'00:00:00.000000'
>>> print (s2 - s2)
0:00:00