代码之家  ›  专栏  ›  技术社区  ›  Hatsune Miku

比较或if语句是否更快[已关闭]

  •  -4
  • Hatsune Miku  · 技术社区  · 1 年前

    执行以下操作会比if语句更快还是更慢?

    mult = x or y 
    # Assuming python considers something 
    # being "0" as false and something being 1 or higher 
    # (or -1 and lower) as true
    
    mult = (x/x) or (y/y) 
    # This is in the case Python doesn't do what was
    # described above
    
    draw(x, y, 0, 255, 0, 255*mult)
    # draw(x_pos, y_pos, red, green, blue, alpha)
    

    不知道如何更好地表达这一点,更不用说是否有必要用更好的措辞了。这只是我在谈论优化代码以提高性能时感到好奇的事情,我想到了这样一个想法,但我不确定,因为谷歌没有提供任何有用的结果(所有这些都是无关的)。

    我可能也可以在自己的时间里测试这一点,但我觉得好像在问一个知道计算机如何进行比较的人,以及语句是否最有帮助。

    2 回复  |  直到 1 年前
        1
  •  -1
  •   tdelaney    1 年前

    Python将其运算符转换为方法调用。它不知道他们中的任何一个到底做了什么。确切的规则可能会变得复杂,但或多或少, mult = x or y 变成

    mult = x.__bool__() or y.__bool__()
    

    x y 决定什么 bool 意味着他们和回报 True False 照着对于整数, 0 错误 ,其他都是 正确 or 短路,如果 x 正确 这个 y 未进行方法调用。

    mult = (x/x) or (y/y) 变成类似

    mult = x.__div__(x).__bool__() or y.__div__(y).__bool__()
    

    x/x 几乎是 1 (至少对于整数),但python并不知道这一点。它需要做额外的 div 呼叫这会使速度变慢。这样写会更快 mult = 1 or 1 ,甚至更好, mult = 1 。当值为 0 就像你会得到 ZeroDivisionError

    draw(x, y, 0, 255, 0, 255*mult) vs draw(x_pos, y_pos, red, green, blue, alpha)

    第一种使用的文字比查找和读取变量快一点 red 等等。但是它有乘法运算的代价。1会快得微不足道。

    这些不同的做事方式都不会对代码IMHO的执行产生真正的影响。这都是一点白噪音。

        2
  •  -1
  •   Hatsune Miku    1 年前

    在运行了一些基准测试(并解决了一些错误)之后。看起来if语句比比较的无分支源方法更快。如果有人感兴趣并想检查任何错误或错误,这里是GitHub。

    https://github.com/Weebed-Coder/comparative_bench

    我很快就把代码拼在了一起 也许 是一些错误。但是,从我所看到的情况来看,if语句运行得更快。鼓励人们也在C/Rust/Assembly中测试这一点,以确保它尽可能少地成为与Python相关的问题。