代码之家  ›  专栏  ›  技术社区  ›  Adam Luchjenbroers

使用timeit管理安装代码

  •  1
  • Adam Luchjenbroers  · 技术社区  · 15 年前

    作为我pet项目的一部分,我需要用python测试我的代码的各种不同实现的性能。我预计这是我做了很多事情,我想尝试使我编写的代码尽可能容易地更新和修改,以达到这个目的。

    目前它还处于初级阶段,但我已经开始使用字符串来管理常见的设置或测试代码,例如:

    naiveSetup = 'from PerformanceTests.Vectors import NaiveVector\n' \
    + 'left = NaiveVector([1,0,0])\n' \
    + 'right = NaiveVector([0,1,0])'
    

    这允许我只写一次代码,代价是使代码更难阅读和更新。

    有更好的办法吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Eli Bendersky    15 年前

    使用三引号“

    setup_code = """
      from PerformanceTests.Vectors import NaiveVector
      left = NaiveVector([1,0,0])
      right = NaiveVector([0,1,0])
    """
    

    另一个有趣的方法在 timeit :

    def test():
        "Stupid test function"
        L = []
        for i in range(100):
            L.append(i)
    
    if __name__=='__main__':
        from timeit import Timer
        t = Timer("test()", "from __main__ import test")
        print t.timeit()
    

    虽然这不适合所有的需要。

        2
  •  0
  •   Mike Dunlavey    15 年前

    计时码是好的,但它仍然会让你猜测发生了什么。

    要了解实际情况,请在调试器中手动将其暂停几次,然后检查调用堆栈。

    例如,在一个比另一个慢30倍的代码中,堆栈的每个样本在花费的额外时间内都有96.7%的机会下降,所以您可以看到原因。

    不需要猜测。