首页 > 解决方案 > 使用魔术方法比在 python 中使用运算符更快吗?

问题描述

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

它会有所作为吗?

谢谢。

标签: pythonoperatorsmagic-methods

解决方案


这是 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__()方法,所以它实际上与a.__add__(b).

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

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


推荐阅读