Add Python-range-function-improved-for-Python2.md
parent
cee896a9ef
commit
b9dfd8d1cd
|
@ -0,0 +1,58 @@
|
||||||
|
# range function improved for Python2
|
||||||
|
|
||||||
|
## This class allows you to have a similar performance to the python3 range in python2
|
||||||
|
|
||||||
|
This class doesn't load all the elements of the range at the same time in a list in memory.
|
||||||
|
|
||||||
|
```Python
|
||||||
|
class range:
|
||||||
|
def __init__(self, start, end=None, step=None):
|
||||||
|
if step is not None and step > 0 and end is not None and end <= start:
|
||||||
|
raise ValueError("The start value is lower than the end")
|
||||||
|
elif end is not None and end < start and step is not None and step > 0:
|
||||||
|
raise ValueError("The end value can't be higher than the start if the step is higher than 0")
|
||||||
|
elif step == 0:
|
||||||
|
raise ValueError("Step value can't be 0")
|
||||||
|
if end is None:
|
||||||
|
end = start
|
||||||
|
start = 0
|
||||||
|
if step is None:
|
||||||
|
step = 1
|
||||||
|
self.start = start - step
|
||||||
|
self.end = end
|
||||||
|
self.step = step
|
||||||
|
self.__actual = 0
|
||||||
|
|
||||||
|
def __getitem__(self, index):
|
||||||
|
if index < 0:
|
||||||
|
raise IndexError("Index value can't be lower than 0")
|
||||||
|
output = self.step * (index + 1) + self.start
|
||||||
|
if self.end > self.start and output >= self.end:
|
||||||
|
raise IndexError("Index out of range")
|
||||||
|
elif self.end < self.start and output <= self.end:
|
||||||
|
raise IndexError("Index out of range")
|
||||||
|
return output
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
val = None
|
||||||
|
try:
|
||||||
|
val = self.__getitem__(self.__actual)
|
||||||
|
except IndexError:
|
||||||
|
raise StopIteration()
|
||||||
|
self.__actual += 1
|
||||||
|
return val
|
||||||
|
|
||||||
|
>>> from_0_to_9 = range(10)
|
||||||
|
>>> print(list(from_0_to_9))
|
||||||
|
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
|
||||||
|
>>> from_1_to_minus9 = range(1, -10, -1)
|
||||||
|
>>> for n in from_1_to_minus9:
|
||||||
|
>>> print(n)
|
||||||
|
1
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
...
|
||||||
|
-8
|
||||||
|
-9
|
||||||
|
```
|
Loading…
Reference in New Issue