代码之家  ›  专栏  ›  技术社区  ›  Henry Kim

为什么在python中v*v比v**2快

  •  4
  • Henry Kim  · 技术社区  · 6 年前

    我试着衡量 v*v v**2 . 结果如下

    # test was generated with randint(1, 999)
    
    # 0.10778516498976387
    print(timeit.timeit("sum([item*item for item in test])", number=10000, setup="from __main__ import test"))
    
    # 0.35526178102009
    print(timeit.timeit("sum([item**2 for item in test])", number=10000, setup="from __main__ import test"))
    

    我开始这个实验的原因是我不想在列表理解中做同样的操作。

    因为运算符出现一次(例如, (item-3) * (item*3) (item-3)**2 )我以为 (项目3)**2 会比 (item-3)*(item-3) . 但完全相反。

    有人能解释为什么吗?

    [++]我用了python3.6.0

    1 回复  |  直到 6 年前
        1
  •  5
  •   Alistair Carscadden    6 年前

    自从 * 是一种深深扎根于处理器和 ** pow 功能。

    使用 k ** 2 开销大于 k * k 因为python将在内部调用pow函数。