4 ms·
> which is the only(?) function in the language that has an optional parameter before a required one. The documentation shows it as being overloaded, rather th
by progval 7y ago
> which is the only(?) function in the language that has an optional parameter before a required one.
The documentation shows it as being overloaded, rather than having default arguments:
range(stop) -> range object
range(start, stop[, step]) -> range object
There's iter which is overloaded:
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
- bakery2k 7y agoThat's the thing - it's documented as overloaded, because that's the most intuitive explanation. Wren would allow it to actually be implemented as an overloaded function. Python doesn't support overloading, and it doesn't support optional arguments before required ones, so the actual implementation in Python is a bit messy - something like: def range(start_or_stop, optional_stop=None): if optional_stop is None: start = 0 stop = start_or_stop else: start = start_or_stop stop = optional_stop ...
- blackandblue 7y agothere is no optional positional in the implementation. range is overloaded in the raw sense of the term as the implementation checks the number of arguments and their types and does the right thing. it could have been implemented in pure python as well by doing args, *kwargs.
- bakery2k 7y agoWell, however the `range` function is implemented, IMO its API would be better expressed as true overloading - as two functions with the same name.