Why does range allow a non-default parameter (stop) to follow a default parameter (start)?
Case in point:
>>> r = range(1, 2, 3)
>>> print(r.start, r.stop, r.step)
1 2 3
>>> r = range(10)
>>> print(r.start, r.stop, r.step)
0 10 1
Trying to emulate the signature is an obvious violation:
def my_range(start=0, stop, end=1):
pass
I understand that the fact it is implemented in C probably allows for behavior that would be a violation in Pythonland.
I'm guessing this was done to make the API more user-friendly but, I didn't find any sources to back it up (The source code doesn't tell much and PEP 457 only states how range is odd). Does anyone know why this was done?