This is not a duplicate of Why a range_iterator when a range is reversed? You'll know why if you take a look at it.
My question pertains to the distinction between a generator resulting from range versus any other iterator, and why that distinction is made:
In [500]: iter(range(5))
Out[500]: <range_iterator at 0x10987f810>
Whereas...
In [506]: (i for i in range(4))
Out[506]: <generator object <genexpr> at 0x10a025fc0>
So, why is this distinction made and what merit does it have?