python - 为什么嵌套时不添加函数的速度测试? (Python)

标签 python performance unit-testing

我正在尝试优化一些代码,所以我想我应该仔细研究我的瓶颈所在。我有四个相互包装的函数,例如:

return f1(f2(f3(f4())))

所以我分别测试了每一个,也测试了一个整体。当我单独使用时,我基本上预先计算了前一个函数。但是,我假设它们加起来就是总时间。但他们没有,当我将它们结合起来时,它会显着增长。所以我决定从更小的角度来看待它。我写这个是为了测试

def f1():
    return 2

def f2(num):
    return num*num

def test():
    for i in range(1000000):
        f1()
def test2():
    for i in range(1000000):
        f2(2)
def test3():
    for i in range(1000000):
        f2(f1())

我返回测试为 0.085 秒,测试 2 为 0.125 秒,测试 3 为 0.171 秒。这让我在两个方面感到困惑。 1) 为什么 test3 不是 .21 秒,以及 2) 为什么它更短而不是我的问题变得更长?

最佳答案

生成列表“range(1000000)”需要大量时间(假设您使用的是 python 2.X)。在 test3 中,您只创建此列表一次。当您对时间求和时,您正在对创建列表的 2 次求和。

您可以使用探查器了解什么需要时间 http://docs.python.org/2/library/profile.html

关于python - 为什么嵌套时不添加函数的速度测试? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17180277/

相关文章:

python - 如何在 python 中保存大 "database-like"类

c++ - GoogleMock 模拟非虚函数

javascript - 单元测试无状态组件方法

python - 增加 Pytorch 神经网络数据集的批量大小

python - 查询时间过长时 psycopg2 游标挂起

python - range() 函数产生错误 'TypeError: ' str' object is not callable'

javascript - 为什么Javascript的每个方法都被压倒了?

c# - 为什么对于这种特定情况,结构比类快得多?

java - 使用日期和&&时的性能问题

android - 使用 mockito 和事件监听器进行单元测试 MVP