iterator.py 994 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/env python3
  2. # Copyright 2009-2017 BHG http://bw.org/
  3. class inclusive_range:
  4. def __init__(self, *args):
  5. numargs = len(args)
  6. self._start = 0
  7. self._step = 1
  8. if numargs < 1:
  9. raise TypeError(f'expected at least 1 argument, got {numargs}')
  10. elif numargs == 1:
  11. self._stop = args[0]
  12. elif numargs == 2:
  13. (self._start, self._stop) = args
  14. elif numargs == 3:
  15. (self._start, self._stop, self._step) = args
  16. else: raise TypeError(f'expected at most 3 arguments, got {numargs}')
  17. self._next = self._start
  18. def __iter__(self):
  19. return self
  20. def __next__(self):
  21. if self._next > self._stop:
  22. raise StopIteration
  23. else:
  24. _r = self._next
  25. self._next += self._step
  26. return _r
  27. def main():
  28. for n in inclusive_range(25):
  29. print(n, end=' ')
  30. print()
  31. if __name__ == '__main__': main()