Entendiendo timedelta

Dado el siguiente código de Python, ayúdame a entender lo que está sucediendo allí.

start_time = time.time() time.sleep(42) end_time = time.time() uptime = end_time - start_time human_uptime = str(datetime.timedelta(seconds=int(uptime))) 

Entonces, obtengo la diferencia entre la start time y la start time end time , en la línea 5 redondeo la duración mediante el lanzamiento y, ahora, ¿cuál es la explicación adicional?

Sé lo que significa delta (promedio o diferencia), pero ¿por qué tengo que pasar seconds = uptime de seconds = uptime a timedelta y por qué la conversión de cadenas funciona tan bien que me sale HH:MM:SS ?

Porque timedelta se define como:

 class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks]) 

Todos los argumentos son opcionales y el valor predeterminado es 0.

Puede decir fácilmente “Tres días y cuatro milisegundos” con argumentos opcionales de esa manera.

 >>> 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) 

Y para el casting, devuelve un buen valor formateado en lugar de __repr__ para mejorar la legibilidad. De los documentos:

str (t) Devuelve una cadena en la forma [D día [s],] [H] H: MM: SS [.UUUUUU], donde D es negativo para t negativo. (5)

 >>> datetime.timedelta(seconds = 42).__repr__() 'datetime.timedelta(0, 42)' >>> datetime.timedelta(seconds = 42).__str__() '0:00:42' 

Documentación de salida:

http://docs.python.org/library/datetime.html#timedelta-objects

¿Por qué tengo que pasar segundos = tiempo de actividad a timedelta

Debido a que los objetos de timedelta se pueden pasar segundos, milisegundos, días, etc., por lo que debe especificar qué pasa (por eso usa la clave explícita). La conversión de tipos a int es superflua, ya que también podrían aceptar flotadores.

y ¿por qué el casting de cuerdas funciona tan bien que me sale HH: MM: SS?

No es el encasillado que formatea, es el método interno __str__ del objeto. De hecho, conseguirás el mismo resultado si escribes:

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