在python中实现运算符
可以在Python中实现运算符吗?像二元运算符一样,类似于+,-。。。例如,我从R中知道,每个操作符实际上都是一个函数,所以+是sumx,y或类似的东西。我想知道这是否也可以实现,例如,我可以将二进制运算符定义为:*。然后用它做一些事情,比如用它来做矩阵乘法,而不是Numpy中的点。我不确定是否可以在python中使用decorator来实现这一点。可以在这里找到用于实现运算符的特殊方法列表: 例如,要实现+=加法运算符,可以执行以下操作:在python中实现运算符,python,numpy,operators,Python,Numpy,Operators,可以在Python中实现运算符吗?像二元运算符一样,类似于+,-。。。例如,我从R中知道,每个操作符实际上都是一个函数,所以+是sumx,y或类似的东西。我想知道这是否也可以实现,例如,我可以将二进制运算符定义为:*。然后用它做一些事情,比如用它来做矩阵乘法,而不是Numpy中的点。我不确定是否可以在python中使用decorator来实现这一点。可以在这里找到用于实现运算符的特殊方法列表: 例如,要实现+=加法运算符,可以执行以下操作: class Adder(object): de
class Adder(object):
def __init__(self, x):
self.x = x
def __iadd__(self, other):
self.x += other.x
return self
if __name__ == '__main__':
a1 = Adder(0)
a2 = Adder(1)
a1 += a2
print a1.x
Python中的运算符通过重载,例如uuu add uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。与Scala或Haskell不同,您不能声明新的运算符文字,例如*。。您也不能为以前定义的类重载运算符,因为实现必须是一个方法。既然Numpy这样做了,那么这一定是可能的,您不同意吗?@KonradRudolph Numpy没有这样做!它完全执行:numpy.matrix[[1,2],[3,4]]*numpy.matrix[[5,6],[7,8]]执行矩阵乘法。只要其中一个操作数属于您定义的类型,就可以为现有类型重载运算符。但不能重载list+int或重新定义tuple+tuple。