在 python 中使用魔术方法比使用运算符更快吗?

Is using magic methods quicker than using operator in python?

我想问一下,使用魔术方法(如 int.__add__())是否比使用运算符(如 +)更快?

即使是一点点也会有所不同吗?

谢谢。

这是 3 种不同添加方式的反汇编字节码。

import dis

def add1(a, b):
    return a + b

dis.dis(add1)
  2           0 LOAD_FAST                0 (a)
              2 LOAD_FAST                1 (b)
              4 BINARY_ADD
              6 RETURN_VALUE

def add2(a, b):
    return a.__add__(b)

dis.dis(add2)
  2           0 LOAD_FAST                0 (a)
              2 LOAD_ATTR                0 (__add__)
              4 LOAD_FAST                1 (b)
              6 CALL_FUNCTION            1
              8 RETURN_VALUE

def add3(a, b):
    return int.__add__(a, b)

dis.dis(add3)
  2           0 LOAD_GLOBAL              0 (int)
              2 LOAD_ATTR                1 (__add__)
              4 LOAD_FAST                0 (a)
              6 LOAD_FAST                1 (b)
              8 CALL_FUNCTION            2
             10 RETURN_VALUE

a+b 生成最简单的字节码,但我希望 BINARY_ADD 的解释器代码只是调用第一个参数的 __add__() 方法,所以它实际上与 [=14 相同=].

int.__add__(a, b) 看起来可能更快,因为它不必为特定对象查找方法,但查找 int.__add__ 属性可能同样昂贵。

如果你真的想找出最好的,我建议你 运行 基准测试。