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

时间:2020-06-30 05:56:36

标签: python operators magic-methods

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

它会有所不同吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

Alice -> Bob: Authentication Request

group My own label
    Bob -> Alice: Authentication Accepted
    Alice -> Bob : Another request
    Bob -> Alice: Another answer
end

Alice -> Bob : and so forth

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)属性可能同样昂贵。

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

相关问题