【发布时间】:2020-06-09 20:49:48
【问题描述】:
将lists 与== 运算符进行比较会返回bool。
>>> [0,0,0] == [0,1,0]
False
将numpy 数组与== 运算符进行比较会返回另一个由元素比较产生的数组。
>>> np.array([0,0,0]) == np.array([0,1,0])
array([ True, False, True])
如果我混合操作数类型,numpy 方法总是优先。
>>> np.array([0,0,0]) == [0,1,0]
array([ True, False, True])
>>> [0,0,0] == np.array([0,1,0])
array([ True, False, True])
Python 如何确定哪个操作数优先?我的问题与Python 的机制有关,而不是numpy 或list。
【问题讨论】:
-
如果
==是一个 numpy 操作,它将有效地获取 RHS 并在其周围抛出一个np.asarray()以将其强制为一个 numpy 数组。这不称为运算符优先级。 -
==成为numpy操作意味着什么?这是否意味着array在 LHS 上?如果是这样,您的回答是有道理的,但如果array在 RHS 上,它如何解决? -
list.__eq__与np.ndarray.__eq__ -
是的,但是
==怎么知道是使用 list.__eq__ 还是 np.ndarray.__eq__?它是根据 LHS 操作数还是其他一些标准来确定这一点? -
这不是运算符优先级的问题,只有一个运算符。基本上,一个定义良好的比较运算符钩子,比如
__eq__,如果它不知道如何处理其他类型,它将返回NotImplemented,然后比较推迟到该类型__eq__在@987654321 中阅读有关它的信息@
标签: python numpy operator-overloading equals