当前位置:   article > 正文

python编写add函数求和_为什么python不利用__iadd__来实现求和和链接运算符?

编写add函数用于求和

我刚做了一个有趣的测试:

~$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不优化这个?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/105537
推荐阅读
相关标签
  

闽ICP备14008679号