Timedelta'yı anlamak


90

Aşağıdaki python kodunu göz önünde bulundurarak, lütfen orada neler olduğunu anlamama yardım edin.

start_time = time.time()
time.sleep(42)
end_time = time.time()

uptime = end_time - start_time

human_uptime = str(datetime.timedelta(seconds=int(uptime)))

Öyleyse start timeve arasındaki farkı anlıyorum end time, 5. satırda süreyi cast ederek yuvarlıyorum ve şimdi ne olacak, ek açıklama nedir?

Delta'nın ne anlama geldiğini biliyorum (ortalama veya fark), ama neden geçmek seconds = uptimezorundayım timedeltave neden yaylı döküm bu kadar güzel çalışıyor HH:MM:SS?

Yanıtlar:


115

Çünkü timedelta şöyle tanımlanır:

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

Tüm bağımsız değişkenler isteğe bağlıdır ve varsayılan olarak 0'dır.

Bu şekilde isteğe bağlı argümanlarla kolayca "Üç gün dört milisaniye" diyebilirsiniz.

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

Ve str çevriminde, __repr__okunabilirliği artırmak yerine güzel bir formatlanmış değer döndürür . Dokümanlardan:

str (t) [G gün [s],] [H] H: MM: SS [.UUUUUU] biçiminde bir dize döndürür; burada D, negatif t için negatiftir. (5)

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

Ödeme belgeleri:

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


13

neden saniye geçmek zorundayım = çalışma süresini timedelta'ya

Timedelta nesneleri saniyeler, milisaniyeler, günler vb. Geçirilebildiğinden, neyi ilettiğinizi belirtmeniz gerekir (bu nedenle açık anahtarı kullanırsınız). Şamandıraları intda kabul edebildikleri için , yazmak gereksizdir.

ve neden string casting bu kadar güzel çalışıyor ki HH: MM: SS alıyorum?

Biçimlendiren tipleme değil __str__, nesnenin dahili metodudur. Aslında yazarsanız aynı sonucu elde edersiniz:

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

1
Bunu ima ediyorsunuz, ancak timedelta'nın şeyleri HH: MM: SS biçiminde göstermekten çok daha fazlasını yaptığını açıkça belirtmekte fayda var. Bir timedelta nesnesi, iki datetime nesnesi arasında bir fark almanız gerektiğinde kullanılır.
Wilduck

1
O değil __repr__öyle, yöntem __str__yöntemi.
utdemir

1
Değil __repr__()timedelta, ama onun içinde __str__()yöntemle. seni printarıyor __str()__.
bgporter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.