아래의 파이썬 코드가 주어지면 거기에서 일어나는 일을 이해하도록 도와주세요.
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
있습니까?
답변
timedelta는 다음과 같이 정의되기 때문입니다.
class datetime.timedelta([days,] [seconds,] [microseconds,] [milliseconds,] [minutes,] [hours,] [weeks])
모든 인수는 선택 사항이며 기본값은 0입니다.
옵션 인수를 사용하여 “3 일 4 밀리 초”라고 쉽게 말할 수 있습니다.
>>> 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는 음수 t에 대해 음수입니다. (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
답변
초를 전달해야하는 이유 = uptime to timedelta
timedelta 객체는 초, 밀리 초, 일 등을 전달할 수 있으므로 전달할 내용을 지정해야합니다 (이것이 명시 적 키를 사용하는 이유입니다). 로 타입 캐스팅 int
은 플로트도 허용 할 수 있으므로 불필요합니다.
그리고 왜 문자열 캐스팅이 그렇게 잘 작동하여 HH : MM : SS를 얻습니까?
형식을 지정하는 것은 형변환이 __str__
아니라 개체 의 내부 방법입니다. 실제로 다음과 같이 작성하면 동일한 결과를 얻을 수 있습니다.
print datetime.timedelta(seconds=int(uptime))