辅助函数flask.helpers.total_seconds()在哪里有用?

时间:2018-04-11 13:59:42

标签: python flask

我刚刚开始阅读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提供)?

1 个答案:

答案 0 :(得分:0)

在Python 2.7之前,

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)