]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Minor updates to the vector demo (GH-24853)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Tue, 16 Mar 2021 02:53:58 +0000 (19:53 -0700)
committerGitHub <noreply@github.com>
Tue, 16 Mar 2021 02:53:58 +0000 (19:53 -0700)
Tools/demo/vector.py

index da5b3891d18c62f72824954c8be6ef987ced1015..6df1f50a8998e160888c9d3636c4c22b8a8fb850 100755 (executable)
@@ -27,7 +27,17 @@ class Vec:
     or on the right
     >>> a * 3.0
     Vec(3.0, 6.0, 9.0)
+
+    and dot product
+    >>> a.dot(b)
+    10
+
+    and printed in vector notation
+    >>> print(a)
+    <1 2 3>
+
     """
+
     def __init__(self, *v):
         self.v = list(v)
 
@@ -40,8 +50,12 @@ class Vec:
         return inst
 
     def __repr__(self):
-        args = ', '.join(repr(x) for x in self.v)
-        return 'Vec({})'.format(args)
+        args = ', '.join([repr(x) for x in self.v])
+        return f'{type(self).__name__}({args})'
+
+    def __str__(self):
+        components = ' '.join([str(x) for x in self.v])
+        return f'<{components}>'
 
     def __len__(self):
         return len(self.v)
@@ -50,22 +64,28 @@ class Vec:
         return self.v[i]
 
     def __add__(self, other):
-        # Element-wise addition
+        "Element-wise addition"
         v = [x + y for x, y in zip(self.v, other.v)]
         return Vec.fromlist(v)
 
     def __sub__(self, other):
-        # Element-wise subtraction
+        "Element-wise subtraction"
         v = [x - y for x, y in zip(self.v, other.v)]
         return Vec.fromlist(v)
 
     def __mul__(self, scalar):
-        # Multiply by scalar
+        "Multiply by scalar"
         v = [x * scalar for x in self.v]
         return Vec.fromlist(v)
 
     __rmul__ = __mul__
 
+    def dot(self, other):
+        "Vector dot product"
+        if not isinstance(other, Vec):
+            raise TypeError
+        return sum(x_i * y_i for (x_i, y_i) in zip(self, other))
+
 
 def test():
     import doctest