在前面第十章以及第一章的时候介绍了Vector对象的运算符重载。第十三章专门介绍运算符重载。这里我们看几个之前没讲过的运算符__neg__,__pos__,__invert__
classVector(object):
def__init__(self,x):
self.x=x
def__neg__(self):
return "Vector(%d)"% (-self.x)
def__str__(self):
return "Vector(%s)"% (str(self.data))
def__iter__(self):
returniter(self.data)
def__pos__(self):
return "Vector(%d)"% (self.x+1)
def__invert__(self):
return "Vector(%d)"% (~self.x)
if__name__=="__main__":
v=Vector(1)
print-v
print+v
print~v
E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter13.py
Vector(-1)
Vector(2)
Vector(-2)
__neg__是在-v的时候调用
__pos__是在+v的时候调用
__invert__是在~v的时候调用
下面我们重新来看下+运算符。我们想实现两个向量想加Vector([1,2,3])+Vector([1,2,3])得到[2,4,6].代码如下
classVector(object):
def__init__(self,x):
self.x=x
def__add__(self, other):
return[a+b fora,b inzip(self.x,other.x)]
if__name__=="__main__":
v1=Vector([1,2,3])
v2=Vector([1,2,3])
printv1+v2
E:\python2.7.11\python.exe E:/py_prj/fluent_python/chapter13.py
[2, 4, 6]
在前面的例子中通过zip函数对两个列表进行配对得到元组。[(1,1),(2,2),(3,3)]然后迭代进行加法运算最终得到结果[2,4,6]
但是如果两个向量的格式变化一下。变成Vector([1,2,3])+Vector([1,2,3,4]).我们期望得到Vector([2,4,,6,4]), 向量Vector([1,2,3,4])由于比Vector([1,2,3])多一个数字,想加的时候最好是用零填充较短