对于
+操作员,Python定义了对象可以实现的三种“特殊”方法:
__add__
:添加两项(+
运算符)。当您执行时a + b
,的__add__
方法a
将以b
作为参数进行调用。__radd__
:反映添加;对于a + b
,的__radd__
方法b
被a
作为实例调用。仅当a
不知道如何添加并且两个对象是不同类型时才使用。__iadd__
:就地添加;用于a += b
将结果分配回左变量的位置。这是单独提供的,因为有可能以更有效的方式实现它。例如,如果a
是列表,则a += b
与相同a.extend(b)
。但是,在这种情况下,c = a + b
您必须先复制的副本,a
然后再进行扩展,因为a
在这种情况下不会进行修改。请注意,如果您未实现,__iadd__
则Python只会调用__add__
。
因此,由于这些不同的操作是通过单独的方法实现的,因此有可能(但通常是不好的做法)实现它们,以使它们执行完全不同的操作,或者在这种情况下,仅执行 略有
不同的操作。
其他人推论您正在使用NumPy并解释了其行为。但是,您询问了底层实现。希望您现在明白 为什么 有时情况与情况
a += b不同
a = a +b。顺便说一下,也可以为其他操作实现类似的三重方法。请参阅此页面以获取所有受支持的就地方法的列表。



