赞
踩
我刚做了一个有趣的测试:
~$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不优化这个?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。