Étant donné le code python ci-dessous, aidez-moi à comprendre ce qui se passe là-bas.
start_time = time.time()
time.sleep(42)
end_time = time.time()
uptime = end_time - start_time
human_uptime = str(datetime.timedelta(seconds=int(uptime)))
Donc, je fais la différence entre start time
et end time
, à la ligne 5, j'arrondis la durée par le casting et que maintenant, quelle explication supplémentaire?
Je sais ce que signifie delta (moyenne ou différence), mais pourquoi dois-je passer seconds = uptime
à timedelta
et pourquoi le casting de la chaîne fonctionne-t-il si bien que je reçois HH:MM:SS
?
Parce que timedelta est défini comme:
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
Tous les arguments sont facultatifs et la valeur par défaut est 0.
Vous pouvez facilement dire "Trois jours et quatre millisecondes" avec des arguments optionnels de cette façon.
>>> 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)
Et pour la diffusion de chaîne, il retourne une valeur formatée Nice au lieu de __repr__
pour améliorer la lisibilité. De docs:
str (t) Renvoie une chaîne sous la forme [jour J [s],] [H] H: MM: SS [.UUUUUU], où D est négatif pour t négatif. (5)
>>> datetime.timedelta(seconds = 42).__repr__()
'datetime.timedelta(0, 42)'
>>> datetime.timedelta(seconds = 42).__str__()
'0:00:42'
Documentation de caisse:
http://docs.python.org/library/datetime.html#timedelta-objects
pourquoi dois-je passer secondes = temps de disponibilité à timedelta
Parce que les objets timedelta peuvent être passés en secondes, en millisecondes, en jours, etc., vous devez donc spécifier ce que vous transmettez (c'est pourquoi vous utilisez la clé explicite). Le transtypage de caractères en int
est superflu, car ils pourraient également accepter des flottants.
et pourquoi le casting fonctionne-t-il si bien que je reçois HH: MM: SS?
Ce n'est pas la conversion de typage qui formate, c'est la méthode interne __str__
de l'objet. En fait, vous obtiendrez le même résultat si vous écrivez:
print datetime.timedelta(seconds=int(uptime))