我刚刚开始阅读Flask的源代码。我发现有一个辅助函数可以导入如下:
from flask.helpers import total_seconds
这是源代码:
def total_seconds(td):
"""Returns the total seconds from a timedelta object.
:param timedelta td: the timedelta to be converted in seconds
:returns: number of seconds
:rtype: int
"""
return td.days * 60 * 60 * 24 + td.seconds
我的问题是,如果我有timedelta
个对象,为什么不通过td.total_seconds()
(由Python标准库提供)而不是使用total_seconds(td)
来获取总秒数(由Flask提供)?
答案 0 :(得分:0)
timedelta
没有获得total_seconds
方法。直到最近,Flask仍然支持Python 2.6。
使用Flask' total_seconds
的函数需要int
返回,但timedelta.total_seconds
会返回float
。在内部,timedelta
is doing similar math到Flask,除了通过做一些额外的乘法和除法来计算微秒。
Flask没有处理它不需要的精确度(以及支持旧版本),而是实现了函数本身。
# Python's implementation, plus int()
int(((self.days * 86400 + self.seconds) * 10**6 + self.microseconds) / 10**6)
# Flask's implementation
td.days * 60 * 60 * 24 + td.seconds
计时结果:
td = timedelta(days=2, seconds=47, microseconds=753)
timeit int(td.total_seconds())
277 ns ± 6.55 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
timeit total_seconds(td)
197 ns ± 2.96 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)