【问题标题】:Test which function is faster测试哪个功能更快
【发布时间】:2014-02-09 11:56:34
【问题描述】:

我有 3 个功能相同但实现方式不同,我想检查其中哪个更快。

我知道有一个计时器库,但我担心如果其中一个是线性的而另一个是指数的,我必须使用不同的输入进行一些测试才能找到答案。例如,如果输入是一个列表,那么对于长度为 20 的列表,函数 A 可能会更快,但对于长度为 1000 的列表,函数 B 会更快。

所以,我想知道是否有任何方法可以自动执行此操作。我可以创建一个脚本来执行此操作,并且可能会在输入长度的基础上绘制一些带有时间的图,但我不想再次发明轮子,如果有一个库可以为我做到这一点。

【问题讨论】:

  • 能否告诉我们您使用的编程语言?
  • 对不起,我的水晶球坏了——你能至少提一下编程语言吗?
  • 可能我需要一杯咖啡。我以为我在标签上添加了它。我使用 Python。
  • 我认为这是一个相关的问题:stackoverflow.com/questions/1593019/…

标签: python performance time


【解决方案1】:

使用timeit:

import timeit

example = 'map(lambda x: x + 1, range(100000)'
t = timeit.Timer(example)
t.timeit()

如果您想要更有特色的东西,this question 可能是相关的。

【讨论】:

    【解决方案2】:

    如果功能很简单,你可以这样做(使用timeit 模块):

    >>> import timeit
    >>> a = ('A()', 'def A():\n    x = [i for i in range({list_length})]\n    x * 3')
    >>> b = ('B()', 'def B():\n    x = []\n    for i in range({list_length}) * 3:\n        x.append(i)')
    >>> c = ('C()', 'def C():\n    x = []\n    for i in range({list_length}):\n        x.append(i)\n    x * 3')
    >>> for num in (100, 1000, 10000):
        for func in (a, b, c):
            print func[0], '=>', num,
            timeit.timeit(func[0], setup=func[1].format(list_length=num), number=10000)
    

    结果:

    A() => 100
    0.06415607679355162
    B() => 100
    0.29436154161112427
    C() => 100
    0.11945218201799435
    A() => 1000
    0.4792028142351228
    B() => 1000
    2.701182674568372
    C() => 1000
    1.0364000362492334
    A() => 10000
    4.432893686294392
    B() => 10000
    26.445674297814094
    C() => 10000
    10.198394832984377
    

    如果功能更复杂,我建议使用Python Profiler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      相关资源
      最近更新 更多