range is iterable but it is not an iterator


Just as a string or a list, the range function in Python is also an "iterable" but it is not an "iterator". In many aspects it behaves as an iterator. Specifically it allows us to iterate over numbers. Range Is Not An Iterator

examples/iterators/range.py
for n in range(2, 12, 3):
    print(n)
print()

for n in range(3):
    print(n)
print()

for n in range(2, 5):
    print(n)
print()

from collections.abc import Iterator, Iterable
rng = range(2, 5)
print(issubclass(rng.__class__, Iterator))
print(issubclass(rng.__class__, Iterable))

2
5
8
11

0
1
2

2
3
4

False
True