Подтвердить что ты не робот

Понимание 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?

4b9b3361

Ответ 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

почему мне нужно передавать секунды = время простоя до timedelta​​p >

Поскольку объекты timedelta могут передаваться в секундах, миллисекундах, днях и т.д., поэтому вам нужно указать, что вы передаете (вот почему вы используете явный ключ). Типизация до int является излишней, поскольку они также могут принимать поплавки.

и почему строковое кастинг работает так хорошо, что я получаю HH: MM: SS?

Это не форматное форматирование, это внутренний метод __str__ объекта. Фактически вы получите тот же результат, если напишете:

print datetime.timedelta(seconds=int(uptime))