updated contents from Atlas repo
This commit is contained in:
43
iterables/vector_flex_init.py
Normal file
43
iterables/vector_flex_init.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
A more flexible `__init__` for the Vector class
|
||||
|
||||
A Vector can be built from an iterable:
|
||||
|
||||
>>> Vector([10, 20, 30])
|
||||
Vector(10, 20, 30)
|
||||
>>> Vector(range(1, 5))
|
||||
Vector(1, 2, 3, 4)
|
||||
|
||||
Or from two more arguments:
|
||||
|
||||
>>> Vector(100, 200)
|
||||
Vector(100, 200)
|
||||
>>> Vector(1, 2, 3, 4, 5)
|
||||
Vector(1, 2, 3, 4, 5)
|
||||
|
||||
One-dimensional vectors are not supported:
|
||||
|
||||
>>> Vector(99)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: Vector() takes one iterable argument or at least 2 scalar arguments
|
||||
|
||||
"""
|
||||
|
||||
import reprlib
|
||||
|
||||
|
||||
class Vector:
|
||||
"""An n-dimensional vector"""
|
||||
|
||||
def __init__(self, first, *rest): # <1>
|
||||
if rest:
|
||||
self._components = (first,) + tuple(rest) # <3>
|
||||
else:
|
||||
try:
|
||||
self._components = tuple(first) # <2>
|
||||
except TypeError:
|
||||
raise TypeError('Vector() takes one iterable argument or at least 2 scalar arguments')
|
||||
|
||||
def __repr__(self):
|
||||
return 'Vector' + reprlib.repr(self._components)
|
||||
Reference in New Issue
Block a user