【发布时间】:2023-04-06 09:13:02
【问题描述】:
如果将整数添加到列表中,则会收到列表的 __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 数组的加法?
【问题讨论】:
-
“列表如何知道如何处理 numpy 数组的加法。” - 它不会,
[1,2,3].__add__(np.array([3]))会失败,但如果第一个,Python 会反转参数尝试失败并且np.array([3]).__radd__([1,2,3])(如果__radd__未定义,则调用__add__)有效。 -
@jonrsharpe 不应该调用
__radd__吗? -
@Christoph 如果已定义,是的;澄清
-
@jonrsharpe:我不认为
a + b会打电话给b.__add__。 Python 不假定加法是可交换的。您可能会想到增强的赋值运算符,其中a += b将首先尝试a.__iadd__,然后在必要时回退到__add__(并进一步到b.__radd__)。 -
@Blckknght 你说得对,我想这就是我的想法。