我想问问,使用魔术方法(如int.__add__()
)比使用运算符(如+
)要快吗?
它会有所不同吗?
谢谢。
答案 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)
属性可能同样昂贵。
如果您真的想找出最好的,我建议您运行基准测试。