Given the python code below, please help me understand what is happening there.
start_time = time.time() time.sleep(42) end_time = time.time() uptime = end_time - start_time human_uptime = str(datetime.timedelta(seconds=int(uptime)))
So I get the difference between
start time and
end time, on line 5 I round up the duration by casting and what now, what's the further explanation?
I know what delta means(average or difference), but why do I have to pass
seconds = uptime to
timedelta and why does the string casting works so nicely that I get
Because timedelta is defined like:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
All arguments are optional and default to 0.
You can easily say "Three days and four milliseconds" with optional arguments that way.
>>> 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)
And for str casting, it returns a nice formatted value instead of
__repr__ to improve readability. From docs:
str(t) Returns a string in the form [D day[s], ][H]H:MM:SS[.UUUUUU], where D is negative for negative t. (5)
>>> datetime.timedelta(seconds = 42).__repr__() 'datetime.timedelta(0, 42)' >>> datetime.timedelta(seconds = 42).__str__() '0:00:42'
why do I have to pass seconds = uptime to timedelta
Because timedelta objects can be passed seconds, milliseconds, days, etc... so you need to specify what are you passing in (this is why you use the explicit key). Typecasting to
int is superfluous as they could also accept floats.
and why does the string casting works so nicely that I get HH:MM:SS ?
It's not the typecasting that formats, is the internal
__str__ method of the object. In fact you will achieve the same result if you write: