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