如果向列表中添加一个整数,则会出现列表的__add__函数引发的错误(我想):
>>> [1,2,3] + 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
如果你向NumPy数组添加一个列表,我假设NumPy数组的__add__函数将列表转换为NumPy数组并添加列表
>>> np.array([3]) + [1,2,3]
array([4, 5, 6])
但是下面会发生什么?
>>> [1,2,3] + np.array([3])
array([4, 5, 6])
列表如何知道如何使用NumPy数组处理添加?
答案 0 :(得分:12)
list
不知道如何使用NumPy数组处理添加。即使在[1,2,3] + np.array([3])
,也是处理添加的NumPy数组。
作为documented in the data model:
对于对象x和y,首先尝试
x.__op__(y)
。如果未实现或返回NotImplemented,则尝试y.__rop__(x)
。如果 这也没有实现或返回NotImplemented,一个TypeError 提出异常。但请参阅以下例外:前一项的异常:如果左操作数是内置类型或新样式类的实例,并且右操作数是 该类型或类的正确子类的实例并覆盖 base的
__rop__()
方法,右操作数的__rop__()
方法是 在左操作数的__op__()
方法之前尝试过。
当你这样做时
[1,2,3] + np.array([3])
内部称为
np.array([3]).__radd__([1,2,3])
答案 1 :(得分:8)
由于np.array的var result = input.replace(/(^|>)([^<]*)(<|$)/g, function(_,a,b,c){
return a
+ b.replace(/b/g, ':blablabla:') // you may do something else here
+ c;
});
方法,请查看此链接:http://www.rafekettler.com/magicmethods.html#numeric(段落反射算术运算符)。
事实上,当您尝试__radd__
时,会引发错误,因此会调用[1,2,3].__add__(np.array([3]))
。