range non-default parameter follows default one
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