gpt4 book ai didi

python - __add__ 和 + 运算符之间的性能差异

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:56 28 4
gpt4 key购买 nike

我正在阅读学习 Python 第 5 版,我需要对这一段进行更多解释:

The __add__ method of strings, for example, is what really performs concatenation; Python maps the first of the following to the second internally, though you shouldn't usually use the second form yourself( it's less intuitive, and might even run slower):

>>> S+'NI!'
'spamNI!'
>>> S.__add__('NI!')
'spamNI!'

所以我的问题是,为什么它会运行得更慢?

最佳答案

>>> def test(a, b):
... return a + b
...
>>> def test2(a, b):
... return a.__add__(b)
...
>>> import dis
>>> dis.dis(test)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BINARY_ADD
7 RETURN_VALUE
>>> dis.dis(test2)
2 0 LOAD_FAST 0 (a)
3 LOAD_ATTR 0 (__add__)
6 LOAD_FAST 1 (b)
9 CALL_FUNCTION 1
12 RETURN_VALUE

1 BINARY_ADD指令而不是 2 条指令:LOAD_ATTRCALL_FUNCTION .自 BINARY_ADD做(几乎)相同的事情(但在 C 中)那么我们可以期望它(稍微)更快。不过,差异几乎不明显。

旁注:所以这类似于汇编的工作方式。通常,当有一条指令与一系列指令执行相同的操作时,它的性能会更好。例如在 x64 LEA指令可以用一系列其他指令代替。但它们的表现不会那么好。

但是有一个陷阱(这解释了为什么我开始谈论 x64 汇编)。有时一条指令实际上性能更差。见臭名昭著的LOOP instruction .这种违反直觉的行为可能有很多原因,例如:有点不同的假设、未优化的实现、历史原因、错误等等。

结论:在 Python 中 + 理论上应该比__add__快但始终衡量

关于python - __add__ 和 + 运算符之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57004214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com