给出下面的python代码,请帮助我了解那里发生了什么。
start_time = time.time()
time.sleep(42)
end_time = time.time()
uptime = end_time - start_time
human_uptime = str(datetime.timedelta(seconds=int(uptime)))
所以我得到了start_time
和end_time
之间的差,在第5行中,我通过强制转换将持续时间取整,现在,进一步的解释是什么?
我知道增量的含义(平均值或差值,但是为什么我必须将seconds = uptime
传递给timedelta
,以及为什么字符串转换效果如此之好以至于我得到HH:MM:SS
?
因为timedelta的定义如下:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
所有参数都是可选的,默认为0。
您可以用可选参数轻松地说出“三天四毫秒”。
>>> datetime.timedelta(days=3, milliseconds=4)
datetime.timedelta(3, 0, 4000)
>>> datetime.timedelta(3, 0, 0, 4) #no need for that.
datetime.timedelta(3, 0, 4000)
对于str强制转换,它返回一个很好的格式化值而不是__repr__
以提高可读性。从文档:
str(t)返回格式为[D day [s],] [H] H:MM:SS [.UUUUUU]的字符串,其中D对负t为负。 (5)
>>> datetime.timedelta(seconds = 42).__repr__()
'datetime.timedelta(0, 42)'
>>> datetime.timedelta(seconds = 42).__str__()
'0:00:42'
结帐文档:
http://docs.python.org/library/datetime.html#timedelta-objects
为什么我必须将秒数=正常运行时间传递给timedelta
因为timedelta对象可以传递秒,毫秒,天等信息,所以您需要指定传递的内容(这就是使用显式键的原因)。向int
进行类型转换是多余的,因为它们也可以接受浮点数。
以及为什么字符串转换工作得如此好以至于我得到了HH:MM:SS?
不是格式化的类型转换,是对象的内部__str__
方法。实际上,如果您编写以下内容,您将获得相同的结果:
print datetime.timedelta(seconds=int(uptime))