一种优雅的单行解决方案,用于从 divmod 的嵌套元组中提取数据

An elegant one-line solution to extract data from Nested Tuples from divmod

假设以下代码:

from datetime import datetime

start_time = datetime.now()
end_time = datetime.now()

delta = end_time - start_time
delta_ms = delta.microseconds

简化 timedelta 对象到分钟、秒和毫秒的转换的最优雅方法是什么?

我下面的一行,需要计算两次divmod(delta_ms,1000),有什么办法,保持一行,只需要计算一次?

mins,secs,ms = divmod(divmod(delta_ms,1000),60) + (divmod(delta_ms,1000)[1],)

我还有下面的,就是两行代码但是只计算了一次divmod(delta_ms,1000)

unwrap = lambda x: divmod(x[0],60) + (x[1],)
mins,secs,ms = unwrap(divmod(delta_ms,1000))

首先,您在第二个 divmod 中错过了一个 [0] :) 您可能想要更改它:

mins,secs,ms = divmod(divmod(delta_ms,1000)[0],60) + (divmod(delta_ms,1000)[1],)

回答你的问题,如果你正在寻找基于它占用的行数的优雅,那么你上面的解决方案最合适。然而,你是 运行 divmod 一个额外的、不必要的时间,这可以在一行中解决(更不优雅,使用 ;):

var1, var2 = divmod(delta_ms,1000);mins,secs,ms = divmod(var1,60) + (var2,)

或者两行:

var1, var2 = divmod(delta_ms,1000)
mins,secs,ms = divmod(var1,60) + (var2,)