python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?
我剛做了一個有趣的測試:
~$python3 # I also conducted this on python 2.7.6, with the same result
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo(object):
... def __add__(self, other):
... global add_calls
... add_calls += 1
... return Foo()
... def __iadd__(self, other):
... return self
...
>>> add_calls = 0
>>> a = list(map(lambda x:Foo(), range(6)))
>>> a[0] + a[1] + a[2]
>>> add_calls
2
>>> add_calls = 0
>>> sum(a, Foo())
>>> add_calls
6
顯然,__ iadd__方法比__add__方法更有效,不需要分配新類.如果我添加的對象足夠復雜,這將創建不必要的新對象,可能會在我的代碼中造成巨大的瓶頸.
我希望在a [0] a [1] a [2]中,第一個操作將調用__add__,第二個操作將在新創建的對象上調用__iadd__.
為什么python不優化這個?
總結
以上是生活随笔為你收集整理的python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: presto联合查询mysql和ES_p
- 下一篇: data 谷歌浏览器更改user 路径_