Понимание timedelta
приведенный код 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 ?
2 ответов:
потому что 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[.Уууууу], где 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
Почему я должен передать секунды = uptime to timedelta
потому что timedelta объекты могут быть переданы секунд, миллисекунд, дней, и т. д... поэтому вам нужно указать, что вы передаете (именно поэтому вы используете явный ключ). Приведение к
intявляется излишним, поскольку они также могут принимать поплавки.и почему литье строк работает так хорошо, что я получаю HH:MM:SS ?
это не форматирование типов, это внутреннее
__str__метод объекта. На самом деле вы добьетесь того же результата, если напишете:print datetime.timedelta(seconds=int(uptime))
Comments